21xrx.com
2024-04-23 23:23:16 Tuesday
登录
文章检索 我的文章 写文章
C中的冒泡排序
2021-07-07 07:22:24 深夜i     --     --
C

C中的冒泡排序以升序排列数字; 您可以将其修改为降序,也可以对字符串进行排序。 冒泡排序算法效率不高,因为它的平均情况和最坏情况的复杂度都是 O(n2)。

冒泡排序算法

 

  1. 从索引 0 开始,将元素与下一个元素进行比较(a[0] & a[1](a 是数组的名称)),如果 a[0] > a[1],则交换。 现在比较 a[1] & a[2] 并交换 a[1] > a[2]。 重复这个过程直到数组结束。 这样做之后,最大的元素出现在最后。 这整个事情被称为通行证。 在第一遍中,我们处理来自 [0,n-1] 的数组元素。
  2. 重复第一步,但处理数组元素 [0, n-2],因为最后一个,即 a[n-1],出现在其正确位置。 在这一步之后,最大的两个元素出现在最后。
  3. 重复此过程 n-1 次。

 

C中的冒泡排序程序

/* Bubble sort code */


#include <stdio.h>

int main()
{
  int array[100], n, c, d, swap;

  printf("Enter number of elements\n");
  scanf("%d", &n);

  printf("Enter %d integers\n", n);

  for (c = 0; c < n; c++)
    scanf("%d", &array[c]);

  for (c = 0 ; c < n - 1; c++)
  {
    for (d = 0 ; d < n - c - 1; d++)
    {
      if (array[d] > array[d+1]) /* For decreasing order use '<' instead of '>' */
      {
        swap       = array[d];
        array[d]   = array[d+1];
        array[d+1] = swap;
      }
    }
  }

  printf("Sorted list in ascending order:\n");

  for (c = 0; c < n; c++)
     printf("%d\n", array[c]);

  return 0;
}


程序输出:

下载冒泡排序程序。

其他排序算法:C中的选择排序C中的插入排序

有许多快速排序算法,如快速排序、堆排序等。 排序简化了计算机编程中的问题解决。

C语言冒泡排序程序使用函数

#include <stdio.h>


void bubble_sort(long [], long);

int main()
{
  long array[100], n, c;

  printf("Enter number of elements\n");
  scanf("%ld", &n);

  printf("Enter %ld integers\n", n);

  for (c = 0; c < n; c++)
    scanf("%ld", &array[c]);

  bubble_sort(array, n);

  printf("Sorted list in ascending order:\n");

  for (c = 0; c < n; c++)
     printf("%ld\n", array[c]);

  return 0;
}

void bubble_sort(long list[], long n)
{
  long c, d, t;

  for (c = 0 ; c < n - 1; c++) {
    for (d = 0 ; d < n - c - 1; d++) {
      if (list[d] > list[d+1]) {
        /* Swapping */
        t         = list[d];
        list[d]   = list[d+1];
        list[d+1] = t;
      }
    }
  }
}

我们可以使用冒泡排序算法来检查数组是否已排序。 如果没有发生交换,则对数组进行排序。 我们可以将其最佳情况复杂度提高到 O(n)。

#include <stdio.h>


int is_Array_Sorted(int [], int);

int main()
{
  int a[100], n, c;

  printf("Enter number of elements\n");
  scanf("%d", &n);

  printf("Enter %d integers\n", n);

  for (c = 0; c < n; c++)
    scanf("%d", &a[c]);

  if (is_Array_Sorted(a, n))
    printf("The array is sorted.\n");
  else
    printf("The array isn't sorted.\n");

  return 0;
}

int is_Array_Sorted(int a[], int n) {
  int c, d, sorted = 1, t;

  for (c = 0 ; c < n - 1; c++) {
    for (d = 0 ; d < n - c - 1; d++) {
      if (a[d] > a[d+1]) {
        t = a[d];
        a[d] = a[d+1];
        a[d+1] = t;
        return 0;
      }
    }
  }
  return 1;
}

 

  
  
下一篇: C中的插入排序

评论区

{{item['qq_nickname']}}
()
回复
回复