[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

相關文章
相關標籤/搜索