快速排序法
- 快速排序法是冒泡法一种改进。
- 它是通过一趟的比较,把将要排序的数据分割成独立的两部分,其中一部分的所有数据都要比另一组的数据都要小。
- 整个排序可用递归进行。
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 }
快速排序法细节较多比较容易错。
大体的思想就是:选取第一个元素为基准,和之后每一个元素比较,小的放前面,然后和之前的元素比较。之后得到两个无序的小数列,和大数列,然后使用递归 。
下面尝试不适用递归的算法
目前不会 哈哈哈