【算法】快速排序
来源:互联网 发布:刺客信条3a卡优化 编辑:程序博客网 时间:2024/05/16 08:16
快速排序也是和归并排序一样是基于分治模式的,即将大问题划分为若干个小问题进行求解。
比如这样一个数列:
data[10] = {3,5,2,78,45,32,90,56,5,67}
快速排序的思想是:
1 先选定一个标记值,可以是集合中的任意一个元素
2 将小于该标记值的元素都移动到标记值的左边,大于标记值的元素都移动到标记值的右边。
然后再对左右的元素重复这个过程。
以上数列
3 5 2 78 4532 90 56 5 67
对其进行排序:
1 选定标记值比如 最后一个元素 67
2 移动过程为:小于67向前面移大于67向后面移。
前三次无需移动因为小于67
第四次78大于67,但是它在前四个元素里面在最有边就不用移了。
第五次 45小于67,需要移动到78的前面。
3 5 2 45 7832 90 56 5 67
第六次 32小于67需要移动到 78 的前面
3 5 2 45 3278 90 56 5 67
第七次 90 大于 67 无需移动
3 5 2 45 3278 90 56 5 67
第八次 56小于67需要移动到78的前面
3 5 2 45 3256 90 78 5 67
第九次 5 小于 67 需要移动到 90 的前面
3 5 2 45 3256 5 78 90 67
最后将67移动到5 的后面,这样就保证了67前面的所有元素都小于67,67后面的所有元素都大于67
这样一次划分就完成了。
以此类推,进行第二次划分
。。。
伪代码实现为:
quikSort(A,p,r)if p < rthen q <---- PARTITION(A,p,r)quikSort(A,p,q-1)quikSort(A,q+1,r)PARTITION(A,p,r)x = A[r]i <----p - 1for j <---p to r-1do if A[j] <= xthen i = i + 1;swap(A[i],A[j])swap(A[i + 1],A[j]);return i + 1
C代码实现为:
#include <stdio.h>#include <stdlib.h>void quikSort(int *data, int p, int r);int PARTITION(int *data,int p,int r);int main(){int data[10] = {3,5,2,78,45,32,90,56,5,67};quikSort(data,0,9);int i = 0;for(i = 0; i < 10; i ++){printf("%3d",data[i]);}return 0;}
int PARTITION(int *data,int p,int r){int x = data[r];int i = p -1;int temp = 0;int j = 0;for(j = p; j < r; j ++){ if(data[j] <= x) { i = i + 1; temp = data[i]; data[i] = data[j]; data[j] = temp; }}temp = data[i + 1];data[i + 1] = data[r];data[r] = temp;return i + 1;
}
void quikSort(int *data, int p, int r){ if(p < r) { int q = PARTITION(data,p,r); int i = 0; for(i = 0; i < 10; i ++) { printf("%3d ",data[i]); } printf("\n"); quikSort(data,p,q-1 ); quikSort(data,q+1,r);; }}
- 排序算法--快速排序
- 排序算法--快速排序
- 排序算法---快速排序
- 排序算法-快速排序
- 排序算法------快速排序
- 排序算法---快速排序
- 排序算法-快速排序
- 排序算法---快速排序
- 排序算法--快速排序
- 排序算法--快速排序
- 排序算法--快速排序
- 排序算法:快速排序
- 排序算法 快速排序
- 排序算法--快速排序
- 排序算法--快速排序
- 【排序算法】快速排序
- 排序算法--快速排序
- 排序算法:快速排序
- 双色点阵动态显示
- 蜂鸣器驱动
- cassandra hector使用方法
- 黑客组织 Anonymous 干过的七件“好事”
- 读卡器基带部分
- 【算法】快速排序
- 10 个平板电脑上的 Python 编辑器
- C#程序只允许运行一个实例的解决方案
- 51 机器周期 时钟周期 晶振频率 定时器初值计算 [李园7舍_404]
- 解决“Access restriction: The type BASE64Encoder is not accessible due to restrict”的问题
- Web请求异步处理降低依赖风险
- 搜索引擎概述
- Web前端浏览器兼容的理解
- 遗留系统的技术栈迁移