快排源代码

来源:互联网 发布:淘宝关键字搜索量 编辑:程序博客网 时间:2024/06/06 03:40

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

/**作者: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);    }}