快速排序算法

来源:互联网 发布:中国观鸟网络 编辑:程序博客网 时间:2024/06/10 12:35
快速排序算法概念:http://baike.baidu.com/link?url=ji1PSulx8MK5pVqu0Zer0KUP-LdO0Mt8uWPPl4oGbDgpTT8R2IKmyU436TlOP6F370d1UoipNLP-KQ7wN7yxYa#3_2
快速排序算法生动讲解:http://developer.51cto.com/art/201403/430986.htm
《实用数据结构基础(第三版)》----教材配套(内有动画演示与PPT)  下载地址:
http://pan.baidu.com/s/1hqKFDbe
1. 快速排序(Quick Sort)算法是是对冒泡排序的一种改进。 其基本思想是: 通过一遍排序将需要排序的数据划分成两部分, 使其中一部分数据比另一部分数据小, 然后再分别对这两部分数据继续进行这种排序, 按此规则继续, 直到每个部分为空或只含一个数据时, 整个快速排序结束。
2. 快速排序使用分治策略来把待排序数据序列分为两个子序列, 核心步骤如下:
(1)从数列中挑出一个元素, 称该元素为“基准”。
(2)扫描一遍数列, 将所有比“基准”小的元素排在基准前面, 所有比“基准”大的元素排在基准后面。
(3)通过递归, 将各子序列划分为更小的序列, 直到把小于基准值元素的子数列和大于基准值元素的子数列排序。
代码案例:
C源文件:QuickSort.c
#include <stdio.h>#include <stdlib.h>#define ARRAYLEN 10//需要排序的数据元素数量//二分函数int Division(int a[], int left, int right){int i;int base = a [left];//取左侧元素为基准元素 while(left < right)//左侧序号小于右侧序号 {while(left < right && a[right] > base)//从右向左找第一个比基准小的元素 right--;a[left] = a[right];//将比基准小的数据移到左侧 while(left < right && a[left] < base)//从左向右找第一个比基准大的元素 left++;a[right] = a[left];//将比基准大的数移到右侧 }a[left] = base;//保存基准数, 即归位基准数 return left; //返回基准序号 }//快速排序函数void QuickSort(int a[], int left, int right){int i;if(left < right)//左侧序号小于右侧序号 {i = Division(a, left, right);//保存基准序号 QuickSort(a, left, i-1);//将基准左侧部分进行递归快速排序 QuickSort(a, i+1, right);//将基准右侧部分进行递归快速排序 }} int main(){int i;int a[ARRAYLEN] = {0};//初始化数组printf("输入数据:");for(i = 0; i < ARRAYLEN; i++)scanf("%d ", &a[i]);printf("原数据:");for(i = 0; i < ARRAYLEN; i++)printf("%d ", a[i]);printf("\n"); //调用快速排序函数QuickSort(a, 0, ARRAYLEN-1);printf("快速排序后:");for(i = 0; i < ARRAYLEN; i++)printf("%d ", a[i]);printf("\n"); return 0;}
下面对一组数据进行快速排序(从小到大):
3 1 2 5 4 6 9 7 10 8 1111111(ps:最后的数不参与排序)
  
 
0 0
原创粉丝点击