数据结构 - 快速排序
2013-05-22 16:10
776 查看
#include <stdio.h> //分区,通过第一个数将数组分为两个部分,返回两个部分的分界点pos int partition(int a[], int low, int high) { int pos, pivotkey = a[low];//pivoktey保存第一个元素作为关键字 while (low < high) { while (low < high && a[high] > pivotkey) high--; a[low] = a[high]; while (low < high && a[low] < pivotkey) low++; a[high] = a[low]; } a[low] = pivotkey;//将关键字置于分界点 pos = low; return pos; } void quick_sort(int a[], int low, int high) { int pos; if (low < high) { pos = partition(a, low, high); quick_sort(a, low, pos - 1); quick_sort(a, pos + 1, high); } } int main() { int i,a[10]={5,0,6,3,2,8,4,9,7,1}; printf("排序前:\n"); for (i=0;i<10;i++) { printf("%d ",a[i]); } printf("\n"); quick_sort(a,0,9); printf("排序后:\n"); for (i=0;i<10;i++) { printf("%d ",a[i]); } printf("\n"); return 0; }
在函数Partition中,high和low分别记录高低位指针,当出现比较、赋值时,下一次并不是从其对应的下一位置开始,而是从上一次发生赋值的地方开始。
什么意思?比如:
while (low < high && a[high] > pivotkey) high--; a[low] = a[high];
注:high指向数据比关键字小,将a[high]赋值给a[low],此时并未交换,故a[high]还是原来的值,只有等到low指向的数据赋值给它时,数值才会变。
所以,当再一次轮到high递减的时候,不是从high的前一个位置(high-1)开始比较,而是就从high开始。这样是否多了一次比较了?
是的,但一次比较也无所谓。如果非要严格思想,从high-1开始比,该怎么写代码?如下,可以在每次赋值的时候相应的将待赋值的指针递增或递减(记为指针移动操作),
但是此时,必须要多加一个条件,就是要考虑low < high ,因为前一次的“指针移动操作“可能会导致 low >= high .不是吗?是否有更简单的写法了?
注意一个问题:当交换数据时,是从交换位置开始继续搜索还是其下一个位置开始,这里考虑边界需要慎重,参考代码如下:
while (low < high) { while (low < high && a[high] > pivotkey) high--; if (low < high) //这里需要添加判断,否则会出现错误, a[low++] = a[high]; while (low < high && a[low] < pivotkey) low++; if (low <high) //同理 a[high--] = a[low]; } a[low] = pivotkey; pos = low; return pos;如果上述代码不添加if判断,结果出错,如图
相关文章推荐
- 数据结构排序之快速排序
- 数据结构 学习笔记(十一):排序(下):快速 / 表 / 桶 / 基数 排序,排序算法的比较
- 数据结构:快速排序
- 数据结构之排序算法二:堆排序,快速排序,归并排序
- 数据结构知识整理-快速排序
- 数据结构复习 快速排序个人总结
- 微软等数据结构+算法面试100题(12)--快速排序
- 10-7-快速排序-内部排序-第10章-《数据结构》课本源码-严蔚敏吴伟民版
- 数据结构--排序算法--快速排序
- 数据结构 — 快速排序
- 浅谈算法和数据结构: 四 快速排序
- 快速排序----C语言数据结构
- 数据结构,冒泡排序,快速排序,插入排序,shell排序
- 【数据结构】常用比较排序算法(包括:选择排序,堆排序,冒泡排序,选择排序,快速排序,归并排序)
- 【算法与数据结构必备】PHP常用排序算法:冒泡,快速排序,插入排序(一维数组)
- 数据结构&算法学习笔记: 快速排序
- 算法与数据结构——快速排序 Quick Sort
- 浅谈算法和数据结构: 四 快速排序
- 数据结构-快速排序
- 黑马程序员之数据结构学习笔记:快速排序