快速排序法
- 快速排序法是冒泡法一種改進。
- 它是通過一趟的比較,把將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都要比另一組的數據都要小。
- 整個排序可用遞歸進行。
1 #include<stdio.h> 2 3 //快速排序法 4 void quick_sort(int a[],int end,int start); 5 int main() 6 { 7 int i; 8 int s[6]; 9 printf("please enter five numbers:\n"); 10 for(i=1;i<6;i++) 11 { 12 scanf("%d",&s[i]); 13 } 14 15 quick_sort(s,5,1); 16 17 printf("after number:\n"); 18 for(i=1;i<6;i++) 19 { 20 printf("%4d",s[i]); 21 } 22 printf("\n"); 23 } 24 25 void quick_sort(int a[],int end,int start) 26 { 27 int i,j; 28 i=start; 29 j=end; 30 31 32 a[0]=a[i]; 33 while(i<j) 34 { 35 36 while(a[j]>=a[0] && j>i) 37 { 38 j--; 39 } 40 if(i<j) 41 { 42 a[i]=a[j]; 43 i++; 44 } 45 while(a[i]<=a[0] && i<j) 46 { 47 i++; 48 } 49 if(i<j) 50 { 51 a[j]=a[i]; 52 j--; 53 } 54 } 55 a[j]=a[0]; 56 if(i<end) 57 quick_sort(a,end,i+1); 58 if(i>start) 59 quick_sort(a,i-1,start); 60 61 62 }
快速排序法細節較多比較容易錯。
大體的思想就是:選取第一個元素為基准,和之后每一個元素比較,小的放前面,然后和之前的元素比較。之后得到兩個無序的小數列,和大數列,然后使用遞歸 。
下面嘗試不適用遞歸的算法
目前不會 哈哈哈