快速排序算法
来源:互联网 发布:阿里云病毒入侵 编辑:程序博客网 时间:2024/05/19 22:57
void sv(int* buffer,int j,int i){ buffer[i] = buffer[i] ^ buffer[j]; buffer[j] = buffer[i] ^ buffer[j]; buffer[i] = buffer[i] ^ buffer[j];}void foo(int* buffer,int bag,int end){ int i = bag; int j = end; int k = i; while (1) { if (k == i) { if (buffer[i] > buffer[j]) { sv(buffer, i, j); k = j; i++; } else { j--; } } else if (buffer[i] > buffer[j]) { sv(buffer, i, j); k = i; j--; } else { i++; } if (i == j) { if (k + 1 < end) { foo(buffer, k + 1, end); } if (bag < k - 1) { foo(buffer,bag,k-1); } return; } }}int main(){ int buffer[] = { 7,3,8,2,6,9,1 }; int n = sizeof(buffer) / sizeof(int); foo(buffer,0,n-1); for (int i = 0; i < n; i++) { printf("%d ", buffer[i]); } system("pause"); return 0;}
分两种情况:第一种让左边的数跟右边最后一个数比较比他大时交换位置,左边的数进一格中间如果还有比右边大的数继续交换,然后i继续进一格一直到i和j重合为止;
第二种如果i=k时;i刚好是最小数那j就需要一直走到头;
给个条件
(当i和j在尾部重合时把头向前移动)或(当i和j在头部重合时把尾部向前移动),然后重复排序的动作,直到位置是有序的为止;
当排序排好后i和j将会在end重合;k+1>end k-1
阅读全文
0 0
- 排序算法--快速排序
- 排序算法--快速排序
- 排序算法---快速排序
- 排序算法-快速排序
- 排序算法------快速排序
- 排序算法---快速排序
- 排序算法-快速排序
- 排序算法---快速排序
- 排序算法--快速排序
- 排序算法--快速排序
- 排序算法--快速排序
- 排序算法:快速排序
- 排序算法 快速排序
- 排序算法--快速排序
- 排序算法--快速排序
- 【排序算法】快速排序
- 排序算法--快速排序
- 排序算法:快速排序
- 批量增加脚本命名空间
- 用SPK技术分析,泰坦尼克号沉船之后哪些人活下来了
- mysql和oracle的分页
- dubbo_zookeeper简单实例
- C++ set集合
- 快速排序算法
- 概要设计与详细设计的区别(转)
- JFreeChart中的时序图
- Dubbo基本原理机制
- Vector3
- getPathInfo() getServletPath() getContextPath() getRequestURL() getRequestURI()
- Linux服务器管理
- 1+2+3+4+……+n的和
- iOS 开发之环形倒计时进度条(虚线/实线)