快速排序详解
来源:互联网 发布:三星ml1861清零软件 编辑:程序博客网 时间:2024/06/09 16:08
快速排序:
快速排序和其他排序方法一样,都是为了将数据进行简洁又快速的排序。
其基本的实现方法其实就是经过一次排序算法之后,先简单地将数据分成两部分:取一个中间数(一般为第一个元素),以这个中间数为中心,左边的数为比这个中间数大的数,右边的数为比这个中间数小的数。之后再进行递归算法,分别处理已经分好的两堆数据。直到最后得到我们想要的排好序的数组。
基本步骤:
1.先确定一个对比数(中间数),一般为第一个元素。
2.取连个变量i、j,i为下标的数字为这个数组的第一个元素,j为下标的数字为这个数组的最后一个元素。
3.首先从后向前开始进行比较,即最后一个元素与中间数比较,如果最后一个元素的值大于第一个元素,j--,继续进行比较,如果j为下标的元素的值小于第一个元素,将最后一个元素的值赋给第一个元素。结束这一次比较。
4.开始从前往后进行比较,如果第一个数的值小于中间数,i++,接着进行比较,如果i为下标的元素的值大于中间数,将这个数字的值赋给j为下标的元素。结束这一次比较。
5.重复3和4步骤,直至i>=j。
文字描述可能不是很清楚,我们通过一个图来说明:
通过程序来实现这个算法:
#include <stdio.h> void QuickSort(int arr[], int left, int right) {int i = left;int j = right;int tmp = arr[i];if(i < j){while(i < j){while((arr[j] > tmp)&&(i < j)){j--;}arr[i] = arr[j];while((arr[i] < tmp)&&(i < j)){i++;}arr[j] = arr[i];}arr[i] = tmp;QuickSort(arr, left, i-1);QuickSort(arr, j+1, right);}else{return;} }int main(){int i = 0;int arr[9] = {5,6,7,1,4,9,3,2,8};printf("未排序前:");for(i = 0; i<9; i++){printf("%d ",arr[i]);}printf("\n");printf("\n");QuickSort(arr, 0, 8);printf("实现排序之后:");for(i = 0; i<9; i++){printf("%d ",arr[i]);}printf("\n");return 0;}
实现截图:
当然,排序算法有许多的表现方式,这只是其中的一种而已,欢迎各位前来共同探讨。
阅读全文
0 0
- 快速排序详解
- 快速排序(详解)
- 快速排序法详解
- 快速排序详解
- 快速排序 详解
- 快速排序法详解
- 快速排序法详解
- Java快速排序详解
- 快速排序详解
- 快速排序详解
- 快速排序详解
- 快速排序--过程详解
- 快速排序详解
- 快速排序详解
- 快速排序代码详解
- 【19】-快速排序详解
- 快速排序详解
- 快速排序详解
- Unity3d 5.3.5使用sqlite3
- Zookeeper注册中心和Dubbo-Admin管理平台的搭建
- 课堂在线Java程序设计 类的继承
- Python网络框架Twisted的使用
- YouTube视频爬虫简单抓取
- 快速排序详解
- 涨粉与变现,微信小程序正确的打开方式是什么?
- 查看Linux进程CPU过高具体的线程堆栈(不中断程序)
- 微信公众平台消息接口开发(50)在线点歌/在线音乐
- Codeforces 300D Painting Square 题解
- API版本兼容@SuppressLint 和 @TargetApi
- 负数除以整数的余数怎么算?
- 课上一节课时间写的《物联网工程》课程报告
- Gson 解析时间格式问题