快速排序算法 基础

快速排序的算法的核心思想是设定一个值,把比这个值大的往右“扔”,比这个值小的往左“扔”。
数组快速排序的过程:

  1. 设置两个变量i、j,排序开始时:i=0,j=n-1;(n为排序总数)
  2. 以数组中的第一个元素作为比较的值,赋给变量key,即key=a[0];
  3. 首先从j往前搜索,即从后往前(–j),找到第一个小于key的值a[j],将a[j]与a[i]进行互换;
  4. 然后再从i往后搜索,即从前往后(++i),找到第一个大于key的值a[i],将a[i]与a[j]进行互换;
  5. 重复第三、四步,直到i等于j。此时就能确保序列中key的左边全是比key小的值,key的右边全是比key大的值。然后再对左右两边分别递归执行上面几个步骤,直到排序结束。
#include <stdio.h>
void QuickSort (int *,int,int);//函数声明,快速排序//
int main(int argc,const char *argv[])
{
    int i;
    int a[]={900,2,-58,3,34,5,76,7,32,4,43,9,1,56,8,-70,635,-234,532,543,2500};
    QuickSort(a,0,20);/*引用起来很简单,0为第一个元素的下表,20为最后一个元素的下表*/
    printf("最终排序结果为:\n");
    for(i=0;i<=20;++i)
    {
        printf("%d\n",a[i]);
    }
    printf("\n");
    return 0;
}
void QuickSort(int *a,int low,int high)
{
    int i,j;
    i=low;
    j=high;
    int key=a[low];
    if(low>=high)//如果low>=high说明排序结束了
    {
        return;
    }
    while(low<high)//该while循环结束一次表示比较了一轮//
    {
        while(low<high&&key<=a[high])
        {
            --high;
        }
        if(key>a[high])
        {
            a[low]=a[high];
            ++low;
        }
        while(low<high&&key>=a[low])
        {
            ++low;
        }
        if(key<a[low])
        {
            a[high]=a[low];
            --high;
        }
        
    }
    a[low]=key;
    QuickSort(a,i,low-1);
    QuickSort(a,low+1,j);
}

猜你喜欢

转载自blog.csdn.net/smilezyf/article/details/92396074