雞尾酒排序Cocktail Sort(排序演算法九)
阿新 • • 發佈:2019-01-03
1.演算法原理
2.程式碼實現
#include <stdio.h> //printArray打印出陣列 void printArray(int a[],int size){ printf("陣列為:[%d] ",a[0]); for (int i=1;i<size;i++) { printf(" %x ",a[i]); } printf("\n"); } void main() { //a[0]監視哨 int a[10] ={0,9,8,7,6,5,4,3,2,1}; int len=10; int low=1, up=len-1, index=1; while (up > low) { for (int i = low; i < up; i++) { if (a[i] > a[i + 1]) { printf(" %d<-->%d ",a[i],a[i+1]); printArray(a,10); a[0]=a[i]; a[i]=a[i+1]; a[i+1]=a[0]; index = i; } } up = index; for (int j = up; j > low; j--) { if (a[j] < a[j - 1]) { printf(" %d<-->%d ",a[j],a[j-1]); printArray(a,10); a[0]=a[j]; a[j]=a[j-1]; a[j-1]=a[0]; index = j; } } low = index; } printArray(a,10); }
3.結果
9<-->8 陣列為:[0] 9 8 7 6 5 4 3 2 1 9<-->7 陣列為:[9] 8 9 7 6 5 4 3 2 1 9<-->6 陣列為:[9] 8 7 9 6 5 4 3 2 1 9<-->5 陣列為:[9] 8 7 6 9 5 4 3 2 1 9<-->4 陣列為:[9] 8 7 6 5 9 4 3 2 1 9<-->3 陣列為:[9] 8 7 6 5 4 9 3 2 1 9<-->2 陣列為:[9] 8 7 6 5 4 3 9 2 1 9<-->1 陣列為:[9] 8 7 6 5 4 3 2 9 1 1<-->2 陣列為:[9] 8 7 6 5 4 3 2 1 9 1<-->3 陣列為:[1] 8 7 6 5 4 3 1 2 9 1<-->4 陣列為:[1] 8 7 6 5 4 1 3 2 9 1<-->5 陣列為:[1] 8 7 6 5 1 4 3 2 9 1<-->6 陣列為:[1] 8 7 6 1 5 4 3 2 9 1<-->7 陣列為:[1] 8 7 1 6 5 4 3 2 9 1<-->8 陣列為:[1] 8 1 7 6 5 4 3 2 9 8<-->7 陣列為:[1] 1 8 7 6 5 4 3 2 9 8<-->6 陣列為:[8] 1 7 8 6 5 4 3 2 9 8<-->5 陣列為:[8] 1 7 6 8 5 4 3 2 9 8<-->4 陣列為:[8] 1 7 6 5 8 4 3 2 9 8<-->3 陣列為:[8] 1 7 6 5 4 8 3 2 9 8<-->2 陣列為:[8] 1 7 6 5 4 3 8 2 9 2<-->3 陣列為:[8] 1 7 6 5 4 3 2 8 9 2<-->4 陣列為:[2] 1 7 6 5 4 2 3 8 9 2<-->5 陣列為:[2] 1 7 6 5 2 4 3 8 9 2<-->6 陣列為:[2] 1 7 6 2 5 4 3 8 9 2<-->7 陣列為:[2] 1 7 2 6 5 4 3 8 9 7<-->6 陣列為:[2] 1 2 7 6 5 4 3 8 9 7<-->5 陣列為:[7] 1 2 6 7 5 4 3 8 9 7<-->4 陣列為:[7] 1 2 6 5 7 4 3 8 9 7<-->3 陣列為:[7] 1 2 6 5 4 7 3 8 9 3<-->4 陣列為:[7] 1 2 6 5 4 3 7 8 9 3<-->5 陣列為:[3] 1 2 6 5 3 4 7 8 9 3<-->6 陣列為:[3] 1 2 6 3 5 4 7 8 9 6<-->5 陣列為:[3] 1 2 3 6 5 4 7 8 9 6<-->4 陣列為:[6] 1 2 3 5 6 4 7 8 9 4<-->5 陣列為:[6] 1 2 3 5 4 6 7 8 9 陣列為:[4] 1 2 3 4 5 6 7 8 9