快速排序

快速排序(Quicksort):是对冒泡排序的一种改进。

基本思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分要小。

然后再按此方法对两部分分别进行排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

注:快速排序时一种不稳定的排序。

过程:

<1>设有数组a[0]……a[n-1],首先任选一个数(一般选第一个数)作为关键数据,然后把所有比它小的放在前边,比它大的放在后面。设i=0;j=n-1;key=a[0];

<2>从j开始向前搜索,直到找到一个小于key的值,交换位置。(a[i],a[j])

<3>从i开始向后搜索,直到找到一个大于key的值,交换位置。(a[i],a[j])

<4>重复2,3的,直到i=j;

代码如下:

#include "stdio.h"

void main()
{
  int i;
  int a[]={6,5,4,3,2,1,7,8,9};
    void quickSort(int a[],int start,int end); /* 对函数的声明*/
    quickSort(a,0,8);
       for(i=0;i<9;i++)
    printf("%d
",a[i]);
    getchar();
    printf("hello what are you doing.");
}
    void quickSort (int a[],int start,int end)
  {
    int temp;
    int i=start;
    int j=end;
    int key=a[i];
    while(i<j)
    {
      while(i<j&&key<=a[j])/*找到第一个小于key的值*/
           { j--;  }
       if(i<j)
      {                            /*交换i,j的值*/
         temp=a[i];
         a[i]=a[j];
         a[j]=temp;
      }
    while(i<j&&key>=a[i])
        {i++;}
        if(i<j)
        {
          temp=a[i];
          a[i]=a[j];
          a[j]=temp;
          }
    }

    if(i-start>1) quickSort(a,start,i-1);
    if(end-i>1) quickSort(a,i+1,end);
  }
原文地址:https://www.cnblogs.com/hzko5114/p/3504129.html