快排源代码

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

/*
*作者:xautjzd
*时间:2013-3-5
*功能:快速排序
**/
#include 
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=pivot)    //j从右到左找比基数小的数
            j--;
        while(i

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

#include 
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

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;ix[pivot])
                 j--;
             if(i


你可能感兴趣的:(Algorithms)