您好,欢迎来到外链网!
当前位置:外链网 » 站长资讯 » 专业问答 » 文章详细 订阅RssFeed

快速排序是排序算法中最快的一种,快速排序是排序算法中评论性能最好的一种排序

来源:互联网 浏览:62次 时间:2023-04-08
1 概述

快速排序(quick sorting)是对气泡排序的一种改进,是关键字次数少,速度较快的一种排序方法。

2 基本思想

简单概括就是:给基准数据找到其正确的索引位置;
具体原理如下:
1)如下图所示,假设目前的基准数据是第一个,也就是元素15,用一个临时变量temp保存元素15,temp=15;然后分别用low和high记录数组的最大和最小下标。

2)首先从后往前开始扫描,如果high对应的元素不小于基准数据,那么high–,也就是把high往前移动一个位置,如果high对应的元素小于基准数据,那么将high所对应的元素赋值给low所对应的元素,。上图中2<15,那么结果如下:

3)然后从前往后开始扫描,如果low对应的元素不大于基准数据,那么low++,也就是把low往后移动一个位置,如果low对应的元素大于基准数据,那么将low所对应的元素赋值给high所对应的元素。上图中2<15,那么结果如下:

此时依旧从前往后开始扫描,直到发现low对应的元素大于基准数据。此时的low对应元素24大于基准元素15,因此,结果如下:

4)重复2)步骤,结果如下:

重复2)步骤,结果如下:

5)重复3)步骤,结果如下:

重复3)步骤,结果如下:

重复3)步骤,结果如下:

6)重复2)步骤,结果如下:

重复2)步骤,结果如下:

重复2)步骤,结果如下:

此时low等于high,那么说明这个位置就是基准数据的正确索引位置;结果如下

如此重复,其实会发现,这种做法的实质就是将不大于基准数据的元素放在基准数据的左边,不小于基准数据的元素放在基准数据的右边,然后使用递归的方式对数据的前后半部分进行排序,直到结束即可。

3 代码演示 #include<stdio.h>int main(){int arr[]={47,34,66,84,70,19,22,47},*p=arr;int i,j,len;printf("请将以下数据升序排列!\n");len = sizeof(arr)/sizeof(arr[0]);for(i=0;i<len;i++){printf("%-4d",*(arr+i));}void quick_sorting_all(int *p,int low,int high);quick_sorting_all(p,0,len);printf("\n排序后的序列如下!\n");for(i=0;i<len;i++){printf("%-4d",*(p+i));}return 0;} // 用于实现移动的函数,返回基准值所对应的下标值int quick_sorting_part(int *p,int low,int high){int temp=*(p+low); // 基准值while(low<high){ // 只要low小于high值 while(low<high && temp<=*(p+high)){ //low小于high,并且基准值小于其右边的值 high--;}*(p+low)= *(p+high); //如果基准值大于其右边儿的值,将 high的值赋值给low while(low<high && temp>=*(p+low)){ //low小于high,并且基准值小于其右边的值 low++;} *(p+high)= *(p+low); //如果基准值小于其左边儿的值,将 low的值赋值给high}*(p+low)=temp;return low;}void quick_sorting_all(int *p,int low,int high){if(low<high){int index=quick_sorting_part(p,low,high);quick_sorting_all(p,low,index-1);quick_sorting_all(p,index+1,high);}} 88348003