[C语言] 交换排序之冒泡排序的特性及实现

[C语言] 交换排序之冒泡排序的特性及实现

1、算法特性

  冒泡排序是一种简单、稳定的交换排序方法,其时间复杂度最好情况为O(n)、最差为O(n²)、平均为O(n²),空间复杂度为O(1)。

2、算法思路

  比较两个相邻的数,当后者大于前者时,二者交换;当后者小于等于前者时,继续检索。每交换一轮都能将未排序序列中的最大值交换至未排序序列尾,成为已排序序列头。同时每一轮交换结束后下一轮比较次数-1,当比较次数为0时排序完成。

3、实现代码

 1 #include <stdio.h>
 2 #include <stdbool.h>
 3 
 4 // 冒泡排序:相邻两个元素进行比较,把大的放后面小的放前面,一轮完整的比较之后,最大值放在末尾
 5 void bubble_sort(int arr[],int len)
 6 {
 7     // 第i次冒泡,把当前最大值放到arr[len-i]
 8     for(int i= 0; i<len; i++)
 9     {    
10         bool flag = false;
11         for(int j=1; j<len-i; j++)
12         {
13             if(arr[j] < arr[j-1])
14             {
15                 int tmp = arr[j];
16                 arr[j] = arr[j-1];
17                 arr[j-1] = tmp;
18                 flag = true; // 表示该次完整的循环有交换位置
19             }
20         }
21         // 所有的相邻元素都已经有序,代表整个数组有序,不需要再进行排序
22         if(flag == false)
23         {
24             break;    
25         }
26     }
27 }
28 
29 void travel(int arr[],int len)
30 {
31     for(int i=0;i<len;i++)
32     {
33         printf("%d ",arr[i]);    
34     }    
35     printf("\n");
36 }
37 
38 int main()
39 {
40     int arr[] = {53,82,9,233,43,14,55,9,4,67};
41     int len = sizeof(arr)/sizeof(arr[0]);
42 
43     travel(arr,len);
44     bubble_sort(arr,len);
45     travel(arr,len);
46 
47 /*    travel(arr,len);
48     quick_sort(arr,len);
49     travel(arr,len);*/
50 
51     return 0;
52 }

4、测试结果

猜你喜欢

转载自www.cnblogs.com/usingnamespace-caoliu/p/9432767.html