排序算法c语言描述---快速排序
来源:互联网 发布:php 取第一个数组 编辑:程序博客网 时间:2024/05/08 20:56
排序算法系列学习,主要描述冒泡排序,选择排序,直接插入排序,希尔排序,堆排序,归并排序,快速排序等排序进行分析。
文章规划:
一。通过自己对排序算法本身的理解,对每个方法写个小测试程序。 具体思路分析不展开描述。
二。通过《大话数据结构》一书的截图,详细分析该算法 。
在此,推荐下程杰老师的《大话数据结构》一书,当然不是打广告,只是以一名读者的身份来客观的看待这本书,确实是通俗易懂,值得一看。
ps:一个较为详细的学习链接 http://blog.csdn.net/MoreWindows/article/category/859207
七。快速排序
一。个人理解
快速排序是对冒泡排序的一种改进。是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。
(1) 分治法的基本思想
分治法的基本思想是:将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解这些子问题,然后将这些子问题的解组合为原问题的解。
分治法的基本思想是:将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解这些子问题,然后将这些子问题的解组合为原问题的解。
(2)快速排序的基本思想
通过一躺排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按次方法对这两部分数据分别进行快速排序(再次分割成独立两部分),整个排序过程可以递归进行,直到每个部分只有一个数据为止,以此达到整个数据变成有序序列。
简单来说,可以分成以下三个过程:
1.先从数列中取出一个数作为基准数。
2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
3.再对左右区间重复第二步,直到各区间只有一个数。
思路也比较简单,下面写了个测试程序,可以对照着理解下。
如果还有什么不懂的,可以看下第二部分,《大话数据结构》书中相关截图,挺详细的。
#include<stdio.h>#define Max_ 10// 打印结果void Show(int arr[], int n){ int i; for ( i=0; i<n; i++ ) printf("%d ", arr[i]); printf("\n");}// 交换数组元素位置void Swap( int *num_a, int *num_b ){ int temp = *num_b; *num_b = *num_a; *num_a = temp;}// 对一个给定范围的子序列选定一个枢纽元素,执行完函数之后返回分割元素所在的位置,// 在分割元素之前的元素都小于枢纽元素,在它后面的元素都大于这个元素int Partition(int array[], int low, int high){ // 采用子序列的第一个元素为枢纽元素 int pivot = array[low]; while (low < high) { // 从后往前在后半部分中寻找第一个小于枢纽元素的元素 while (low < high && array[high] >= pivot) { --high; } // 将这个比枢纽元素小的元素交换到前半部分 Swap(&array[low], &array[high]); // 从前往后在前半部分中寻找第一个大于枢纽元素的元素 while (low < high && array[low] <= pivot) { ++low; } // 将这个比枢纽元素大的元素交换到后半部分 Swap(&array[low], &array[high]); } // 返回枢纽元素所在的位置 return low;}// 快速排序void QuickSort(int array[], int low, int high){ if (low < high) { int n = Partition(array, low, high); QuickSort(array, low, n); QuickSort(array, n + 1, high); }}int main(){ //测试数据 int arr_test[Max_] = { 8, 4, 2, 3, 5, 1, 6, 9, 0, 7 }; //排序前数组序列 Show( arr_test, Max_ ); QuickSort( arr_test, 0, Max_-1 ); //排序后数组序列 Show( arr_test, Max_ ); return 0;}
二。 《大话数据结构》一书截图分析
注:本文仅为分享知识,绝无商业用途。
如果以该种形式分享知识造成不必要的纠纷,还请第一时间告知。
- 排序算法c语言描述---快速排序
- 排序算法c语言描述-快速排序随机化
- 19、排序算法c语言描述---快速排序
- 快速排序 C语言描述
- 排序 (插入排序,快速排序,希尔排序)数据结构与算法分析-C语言描述
- 排序算法c语言描述---冒泡排序
- 排序算法c语言描述---选择排序
- 排序算法c语言描述---希尔排序
- 排序算法c语言描述---堆排序
- 排序算法c语言描述---归并排序
- 排序算法c语言描述---计数排序
- 排序算法c语言描述---桶排序
- 快速排序算法 java语言描述
- 快速排序算法(C语言)
- 快速排序算法-C语言
- C语言 ---- 快速排序算法
- C语言,快速排序算法
- 快速排序算法C语言
- 爱马仕手表如何鉴别真假?
- oracle 查询当前用户表名
- JAVA NIO 简介
- poj-1256 Anagram 全排列
- 现代Web应用开发者必备的六大技能
- 排序算法c语言描述---快速排序
- 用C开发PHP扩展 实例(基础版)
- iostream.h 和stdio.h区别
- Golden chain
- Mat vector array访问效率测试
- 数字证书
- KM算法 详解+模板
- 2013年 移动App设计13项注意细节总结
- 使用SDWebImage进行简单的图片下载和缓存