快排源代码

昨天看了一下午的快排,终于写出了快排,并且测试通过,现贴出与大家共享。

[cpp] view plain?
  1. /* 
  2. *作者:xautjzd 
  3. *时间:2013-3-5 
  4. *功能:快速排序 
  5. **/  
  6. #include <stdio.h>  
  7. void quickSort(int a[],int left,int right);  
  8. void swap(int *x,int *y);  
  9. int main(){  
  10.     int array[]={10,9,8,7,6,5,4,3,2,1};  
  11.     quickSort(array,0,9);  
  12.     int i=0;  
  13.     for(i=0;i<10;i++)  
  14.         printf("%d ",array[i]);  
  15.     printf("\n");  
  16.     return 0;  
  17. }  
  18.   
  19. void quickSort(int a[],int left,int right){  
  20.     int i=left,j=right;  
  21.     int pivot=a[left];      //设最左的待排数组为基数  
  22.     for(;;){  
  23.         while(i<j&&a[j]>=pivot)    //j从右到左找比基数小的数  
  24.             j--;  
  25.         while(i<j&&a[i]<=pivot)    //i从左到右找比基数大的数  
  26.             i++;  
  27.         if(i<j)                    //i<j,交换找出符合条件的两数  
  28.             swap(&a[i],&a[j]);  
  29.         else                       //否则第一次循环结束,i左侧的数比基数都小,i右侧的数比基数都大  
  30.             break;  
  31.     }  
  32.     swap(&a[i],&a[left]);  
  33.     if(left<right)            //判断数组长度是否大于1,至少有两数才需继续递归  
  34.         quickSort(a,left,i-1);  
  35.     if(left<right)  
  36.         quickSort(a,i+1,right);  
  37. }  
  38.   
  39. void swap(int *x,int *y){  
  40.     int temp=*x;  
  41.     *x=*y;  
  42.     *y=temp;  
  43. }  

下列代码是参考网上的代码,也一并贴出

[html] view plain?
  1. #include <stdio.h>  
  2. void quickSort(int numbers[], int array_size);  
  3. void q_sort(int numbers[], int left, int right);  
  4. int main(){  
  5.     int array[]={7,4,6,9,1,3,8,2,10,5};  
  6.     quickSort(array,10);  
  7.     int i=0;  
  8.     for(i=0;i<10;i++)  
  9.         printf("%d ",array[i]);  
  10.     printf("\n");  
  11.     return 0;  
  12. }  
  13.   
  14. void quickSort(int numbers[], int array_size)  
  15. {  
  16.   q_sort(numbers, 0, array_size - 1);  
  17. }  
  18.   
  19.   
  20. void q_sort(int numbers[], int left, int right)  
  21. {  
  22.   int pivot, l_hold, r_hold;  
  23.   
  24.   l_hold = left;  
  25.   r_hold = right;  
  26.   pivot = numbers[left];  
  27.   while (left < right)  
  28.   {  
  29.     while ((numbers[right] >= pivot) && (left < right))  
  30.       right--;  
  31.     if (left != right)  
  32.     {  
  33.       numbers[left] = numbers[right];  
  34.       left++;  
  35.     }  
  36.     while ((numbers[left] <= pivot) && (left < right))  
  37.       left++;  
  38.     if (left != right)  
  39.     {  
  40.       numbers[right] = numbers[left];  
  41.       right--;  
  42.     }  
  43.   }  
  44.   numbers[left] = pivot;  
  45.   pivot = left;  
  46.   left = l_hold;  
  47.   right = r_hold;  
  48.   if (left < pivot)  
  49.     q_sort(numbers, left, pivot-1);  
  50.   if (right > pivot)  
  51.     q_sort(numbers, pivot+1, right);  
  52. }  

或者

[html] view plain?
  1.  #include<stdio.h>  
  2.   
  3. void quicksort(int x[],int,int);  
  4.   
  5. int main(){  
  6.   int x[100],size,i;  
  7.   
  8.   printf("Enter size of the array: ");  
  9.   scanf("%d",&size);  
  10.   
  11.   printf("Enter %d elements: ",size);  
  12.   for(i=0;i<size;i++)  
  13.     scanf("%d",&x[i]);  
  14.   
  15.   quicksort(x,0,size-1);  
  16.   
  17.   printf("Sorted elements: ");  
  18.   for(i=0;i<size;i++)  
  19.     printf(" %d",x[i]);  
  20.   
  21.   return 0;  
  22. }  
  23.   
  24. void quicksort(int x[],int first,int last){  
  25.     int pivot,j,temp,i;  
  26.   
  27.      if(first<last){  
  28.          pivot=first;  
  29.          i=first;  
  30.          j=last;  
  31.   
  32.          while(i<j){  
  33.              while(x[i]<=x[pivot]&&i<last)  
  34.                  i++;  
  35.              while(x[j]>x[pivot])  
  36.                  j--;  
  37.              if(i<j){  
  38.                  temp=x[i];  
  39.                   x[i]=x[j];  
  40.                   x[j]=temp;  
  41.              }  
  42.          }  
  43.   
  44.          temp=x[pivot];  
  45.          x[pivot]=x[j];  
  46.          x[j]=temp;  
  47.          quicksort(x,first,j-1);  
  48.          quicksort(x,j+1,last);  
  49.   
  50.     }  

你可能感兴趣的:(快排源代码)