排序算法之快速排序
2015-10-29 23:43
323 查看
快速排序
快速排序是在待排序序列中选定一个数(一般以选择第一个数),然后将待排序序列这样处理:以选定的这个数为基准,这个数的左边存放比它小的数,右边存放比它大的数。处理完之后去右边的区间选定一个数继续进行这样的过程,去右边的区间选定一个数继续进行这样的过程。例如序列{50, 10, 90, 30, 70, 40, 80, 60, 20}。第一趟时,选择50为基准,做一个循环将比50小的数移动到左边,比50大的数移动到右边。该序列变为{20, 10, 40, 50, 70, 80, 60, 90}。然后在50的左边的区间和右边的区间继续进行这样的操作,得到序列{10, 20, 40, 50, 60, 70, 80, 90},接着去然后20的左边和右边,70的左边和右边进行这样的操作。
有上面的介绍可以看出,快速排序最主要的过程就是要将比基准元素小的数移动到基准元素的左边,将比基准元素大的数移动到基准元素的右边。这个过程的实现是通过两个标志指针(不是实际意义上的指针,有些像控制循环变量i),一个指针i从下标0开始向后,一个指针j从size-1开始向前,j先开始移动去找比基准元素小的值,找到的话将这个值赋值给i指向的空间,接着i开始移动,去找比基准元素大的数,找到的话将其赋值给j指向的空间,然后j移动…..一直到i和j相遇为止。
typedef int datatype; int QuickSort(datatype *array, int low, int high) { int i = low; int j = high; int temp; if(array == NULL) { return -1; } //递归的临界条件 if(low >= high) { return -1; } //选取区间第一个数为基准元素 temp = array[low]; while(i != j) { //j向前移动找比基准元素小的数 for( ; j > i && array[j] > temp; j--) ; //将找到的数赋值给i指向的空间 if(j > i) { array[i] = array[j]; i++; } //i向后移动找比基准元素大的数 for( ; i < j && temp > array[i]; i++) ; //将找到的数赋值给j指向的空间 if(i < j) { array[j] = array[i]; j--; } } //将基准元素放在中间的位置(即i或j指向的位置) array[i] = temp; //比基准元素小的左区间进行快速排序 QuickSort(array, low, i-1); //比基准元素大的右区间进行快速排序 QuickSort(array, i+1, high); return 0; }
相关文章推荐
- Quartz2D:图形上下文栈
- 夺命雷公狗jquery---40在元素头尾部插入元素可alert出来看
- poj 1176 Party Lamps 搜索
- AS导入源码卡在Gradle构建界面
- 使用正则表达式过滤HTML中标签
- ie 游览器翻译小书签
- 【整理】如何使元素水平垂直居中
- [持续更新]总结与感悟:代码与狼生
- linux命令学习之路
- ZOJ 2243 Binary Search Heap Construction笛卡尔树(二叉搜索+堆)
- 从头认识java-6.2 继承(Generalization)(2)
- 从头认识java-6.2 继承(Generalization)(2)
- 腾讯2015年校招笔试题_题来了
- Vm下linux网络配置
- Raspberry Pi 树莓派入门
- JavaScript学习随记——常见全局对象属性及方法
- Android获取View位置
- 听我说说我的博客: 月访问量过万的个人IT博客的技术史
- linux下配置yum源详解
- Exception