快速排序算法——代码详细注解
来源:互联网 发布:安全的聊天软件 编辑:程序博客网 时间:2024/06/06 09:10
快速排序的过程:把比 k 大的移到k的右边,比k小的移到k的左边,然后分别对左边和右边排序。
初混江湖,如有错误,还请指正。另:代码来自mooc课后自己写的,不知此文章是否算原创
#include<cstdio>#include<iostream>using namespace std;void swap(int &a,int &b) //取地址交换 a[i]和a[j]的值; { int temp=a; a=b; b=temp; }void quick_sort(int a[],int start,int end) { if(start>=end) return; // 如果 起点和终点 相遇,遍历完毕,结束程序; 这是递归的边界条件 int k=a[start]; // 标记起点 int i=start,j=end; // 函数中会改变start和end,但是递归的时候需要用到,所以此处赋值 while(i!=j) // 当左边的 i,右边的 j 没有相遇的时候 { while(j>i &&a[j]>=k) // 循环,当a[j]>=k时,不需要交换,所以j往左移 j--; //且每次进行到这里都为 [奇数] 个循环,a[j]始终在k右边 swap(a[i],a[j]); // 上面循环结束的时候,说明位于右边的a[j]<k,需要交换 //交换之后的情况是: i,j所在位置不变,k跑到了右边 while(j>i &&a[i]<=k) // 此时移动左边的 i i++; swap(a[i],a[j]); // 上个循环结束之后,找到了有一个需要交换的位置 } //大循环结束,左边 <= k <= 右边 quick_sort(a,start,i-i); quick_sort(a,i+1,end); //对左,右进行递归排序}int main(){ int i; int a[10]={1,9,3,7,2,0,8,5,6,4}; //剩下的没什么好解释了 quick_sort(a,0,9); for(i=0;i<10;i++) printf("%d ",a[i]); return 0; }
阅读全文
0 0
- 快速排序算法——代码详细注解
- 排序算法C++代码——快速排序
- 八大排序算法及完整c代码—快速排序
- 快速排序算法代码
- 排序算法—快速排序
- 排序算法—快速排序
- 算法学习与代码实现6——快速排序
- 【排序算法】快速排序算法代码演示
- EM算法MATLAB代码及详细注解
- 快速排序算法代码实现
- 快速排序算法 C++代码
- 算法导论:快速排序代码
- Lua快速排序算法+代码
- Lua快速排序算法+代码
- 【算法】——快速排序
- 算法——快速排序
- 算法——快速排序
- 算法——快速排序
- HDU 6201 transaction transaction transaction
- Hadoop初次体验:各种坑以及解决办法
- 简单的网络聊天室
- 模板抽题实现
- tensorflow中的seq2seq例子为什么需要bucket? 有关tensorflow 的sequence2sequence例子,为什么需要用到buckets,rnn不是可以处理任意长度的数据吗
- 快速排序算法——代码详细注解
- 【基础算法】算法总结
- Leetcode c语言-String to Integer (atoi)
- QML动画和过度
- CCF-201403-1-相反数
- JAVA工具类(14)----UUID工具类,产生随机字符串主键
- 单表查询
- MongoDB查询分析常用函数explain()
- getline()