[C语言] 选择排序之鸡尾酒排序的特性及实现

C语言] 选择排序之鸡尾酒排序的特性及实现
算法

 

一、算法特性测试

  鸡尾酒排序又称定向冒泡排序法,是一种稳定的选择排序方法,排序效果稍优于冒泡排序。spa

  其时间复杂度最好状况为O(n)、最差与平均状况为O(n²),空间复杂度为O(1)。3d

 

二、算法思路:code

  以升序排列为例,先设置两个临时变量index_nmin与index_nmax分别存储最小值与最大值的下标,初始通常假设index_nmin与index_nmax均为0,再将选定值与其以后的数据依次比较:当比较值比选择值小/大时,index_nmin/index_nmax更新为比较值的下标,以后继续检索,直到无序序列部分结束为止;一轮检索事后将arr[index_nmin]与无序序列队首、arr[index_nmax]与无序序列队尾交换位置,通过len/2次循环即可以将全部数据排列有序。blog

  这里须要注意的是,在最小/最大值与相应位置交换以后须要多一道核实流程:在最小/最大值交换完毕后,检查最大/最小值的下标是不是i-1/len-i,如果,则要将最大/最小值与下标i-1/len-i交换;若不是,则继续正常交换。其目的是避免最大最小值最终位置错乱。排序

   

 

三、实现代码io

 1 #include <stdio.h>
 2 
 3 // 鸡尾酒排序:选择排序一种变化形式
 4 void cooktail_sort(int arr[],int len)
 5 {
 6     for(int i=1; i<=len/2; i++)
 7     {
 8         int max = i-1;
 9         int min = i-1;
10         for(int j=i; j<=len-i; j++)
11         {
12             if(arr[j] > arr[max])
13             {
14                 max = j;
15             }
16             if(arr[j] < arr[min])
17             {
18                 min = j;    
19             }
20         }
21         if(max != len-i)
22         {
23             int tmp = arr[len-i];
24             arr[len-i] = arr[max];
25             arr[max] = tmp;
26         }
27         if(min == len-i) // 最小值的位置正好在原本应该存储最大值位置 通过上面交换以后最小值放到了max位置上
28         {
29             int tmp = arr[i-1];
30             arr[i-1] = arr[max];
31             arr[max] = tmp;
32         }
33         else if(min != i-1)
34         {
35             int tmp = arr[i-1];
36             arr[i-1] = arr[min];
37             arr[min] = tmp;
38         }
39     }    
40 }
41 
42 void travel(int arr[],int len)
43 {
44     for(int i=0;i<len;i++)
45     {
46         printf("%d ",arr[i]);    
47     }    
48     printf("\n");
49 }
50 
51 int main()
52 {
53     int arr[] = {53,82,9,233,43,14,55,9,4,67};
54     int len = sizeof(arr)/sizeof(arr[0]);
55 
56     travel(arr,len);
57     select_sort(arr,len);
58     travel(arr,len);
59 
60 /*  travel(arr,len);
61     cooktail_sort(arr,len);
62     travel(arr,len);*/
63 
64     return 0;
65 }

 

四、测试结果class

相关文章
相关标签/搜索