快速排序 - C语言

啥是快排

快排就是选定一个基准元素pirot,经过一趟排序后,使得pirot前面的元素都比它小,pirot后面的元素都比它大,之后以pirot为界,分为两部分数据,按刚才的方法对这两部分数据分别快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

一趟快排

假定对有N个元素的数组 arr 进行快排
1)设置两个变量i、j,排序开始的时候i:=1,j:=N;

2)以第一个数组元素arr[0]作为基准元素,赋值给pirot,即pirot:=arr[0];

3)从j开始向前搜索,即由后开始向前搜索,只要j大于pirot, j:=j-1,一旦找到第一个小于pirot的值,两者交换,然后把主动权交给i,让i跑;

4)从i开始向后搜索,即由前开始向后搜索,只要i小于pirot, i:=i-1,一旦找到第一个大于pirot的值,两者交换,然后把主动权交给j,让j跑;

5)重复第3、4步,直到 i=j ;
例如,对32 12 7 78 23 45进行第一趟排序

第一趟排序

代码如下

#include<stdio.h> 

int  arr[6] = {32 ,12 ,7 ,78, 23, 45};
void quiksort(int a[],int low,int high)
{
    int i = low;
    int j = high;  
    int temp = a[i]; 
  
    if( low > high)
    {          
       return ;
    }
    while(i < j) 
        {
            while((a[j] >= temp) && (i < j))
            { 
                j--; 
            }
            a[i] = a[j];
            while((a[i] <= temp) && (i < j))
            {
                i++; 
            }  
            a[j]= a[i];
        }
     a[i] = temp;
     quiksort(a,low,i-1);
     quiksort(a,j+1,high);
}
 
void main()
{
    int i;
    quiksort(arr,0,5);
    for(i=0;i<6;i++)
    {
        printf("%d ",arr[i]);
    }
    printf("\n");
}

要注意递归的出口是low==high,所以当
` ``
if(low>high){
return;
}

每天都努力一点点
谢谢你看完
***
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 某次二面时,面试官问起Js排序问题,吾绞尽脑汁回答了几种,深感算法有很大的问题,所以总计一下! 排序算法说明 (1...
    流浪的先知阅读 1,214评论 0 4
  • 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    蚁前阅读 5,222评论 0 52
  • 概述:排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    每天刷两次牙阅读 3,747评论 0 15
  • 想寄封信给你 在春天 寄叶的碧绿花的妖艳 想寄封信给你 在远方 有天的辽阔海的湛蓝 想寄封信给你 在心中 有我的孤...
    江城妖怪阅读 221评论 0 0
  • 第十八期中級班今天結業了,29個生命經過5天4夜的蛻變,每個人在追逐幸福的路上又往前邁進一大步,看著他們喜...
    盛世贏家葉小華阅读 157评论 0 0