昨天看了一下午的快排,終于寫出了快排,并且測試通過,現貼出與大家共享。
[cpp] view plain?
- #include <stdio.h>
- void quickSort(int a[],int left,int right);
- void swap(int *x,int *y);
- int main(){
- int array[]={10,9,8,7,6,5,4,3,2,1};
- quickSort(array,0,9);
- int i=0;
- for(i=0;i<10;i++)
- printf("%d ",array[i]);
- printf("\n");
- return 0;
- }
- void quickSort(int a[],int left,int right){
- int i=left,j=right;
- int pivot=a[left]; //設最左的待排數組為基數
- for(;;){
- while(i<j&&a[j]>=pivot) //j從右到左找比基數小的數
- j--;
- while(i<j&&a[i]<=pivot) //i從左到右找比基數大的數
- i++;
- if(i<j) //i<j,交換找出符合條件的兩數
- swap(&a[i],&a[j]);
- else //否則第一次循環結束,i左側的數比基數都小,i右側的數比基數都大
- break;
- }
- swap(&a[i],&a[left]);
- if(left<right) //判斷數組長度是否大于1,至少有兩數才需繼續遞歸
- quickSort(a,left,i-1);
- if(left<right)
- quickSort(a,i+1,right);
- }
- void swap(int *x,int *y){
- int temp=*x;
- *x=*y;
- *y=temp;
- }
下列代碼是參考網上的代碼,也一并貼出
[html] view plain?
- #include <stdio.h>
- void quickSort(int numbers[], int array_size);
- void q_sort(int numbers[], int left, int right);
- int main(){
- int array[]={7,4,6,9,1,3,8,2,10,5};
- quickSort(array,10);
- int i=0;
- for(i=0;i<10;i++)
- printf("%d ",array[i]);
- printf("\n");
- return 0;
- }
- void quickSort(int numbers[], int array_size)
- {
- q_sort(numbers, 0, array_size - 1);
- }
- void q_sort(int numbers[], int left, int right)
- {
- int pivot, l_hold, r_hold;
- l_hold = left;
- r_hold = right;
- pivot = numbers[left];
- while (left < right)
- {
- while ((numbers[right] >= pivot) && (left < right))
- right--;
- if (left != right)
- {
- numbers[left] = numbers[right];
- left++;
- }
- while ((numbers[left] <= pivot) && (left < right))
- left++;
- if (left != right)
- {
- numbers[right] = numbers[left];
- right--;
- }
- }
- numbers[left] = pivot;
- pivot = left;
- left = l_hold;
- right = r_hold;
- if (left < pivot)
- q_sort(numbers, left, pivot-1);
- if (right > pivot)
- q_sort(numbers, pivot+1, right);
- }
或者
[html] view plain?
- #include<stdio.h>
- void quicksort(int x[],int,int);
- int main(){
- int x[100],size,i;
- printf("Enter size of the array: ");
- scanf("%d",&size);
- printf("Enter %d elements: ",size);
- for(i=0;i<size;i++)
- scanf("%d",&x[i]);
- quicksort(x,0,size-1);
- printf("Sorted elements: ");
- for(i=0;i<size;i++)
- printf(" %d",x[i]);
- return 0;
- }
- void quicksort(int x[],int first,int last){
- int pivot,j,temp,i;
- if(first<last){
- pivot=first;
- i=first;
- j=last;
- while(i<j){
- while(x[i]<=x[pivot]&&i<last)
- i++;
- while(x[j]>x[pivot])
- j--;
- if(i<j){
- temp=x[i];
- x[i]=x[j];
- x[j]=temp;
- }
- }
- temp=x[pivot];
- x[pivot]=x[j];
- x[j]=temp;
- quicksort(x,first,j-1);
- quicksort(x,j+1,last);
- }
- }