快排原始碼

jiangzhengdong發表於2013-03-05

昨天看了一下午的快排,終於寫出了快排,並且測試通過,現貼出與大家共享。

/*
*作者:xautjzd
*時間:2013-3-5
*功能:快速排序
**/
#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;
}

下列程式碼是參考網上的程式碼,也一併貼出

#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);
}

或者

 #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);

    }
}


相關文章