排序【6】之快速排序的C语言实现
2018-01-20 13:32
288 查看
快速排序是一种非常高效的排序方法,采用“分而治之”的思想,把大的拆分为小的,小的在拆分为更小的。
原理是:对于一组给定的记录,通过一趟排序后,将原序列分为两部分,其中前部分的所有记录均比后部分的所有记录小,然后再依次对前后两部分的记录进行快速排序,递归该过程,直到序列中的所有记录均为有序为止。
快速排序特点:
稳 定 性:不稳定
平均时间复杂度: O(nlog2n)
排序过程举例:
继续进行第二趟第三趟直至排完为止
代码:
原理是:对于一组给定的记录,通过一趟排序后,将原序列分为两部分,其中前部分的所有记录均比后部分的所有记录小,然后再依次对前后两部分的记录进行快速排序,递归该过程,直到序列中的所有记录均为有序为止。
快速排序特点:
稳 定 性:不稳定
平均时间复杂度: O(nlog2n)
排序过程举例:
继续进行第二趟第三趟直至排完为止
代码:
#include <stdio.h> void sort(int array[], int low, int high) { int i, j; int index; if(low >= high) //递归结束的控制条件,满足时 return 返回上一级 { return; } i = low; j = high; index = array[i]; while(i < j) { //从后往前遍历,找到第一个比index小的数 while(i < j && array[j] >= index ) { j--; } //如果在下标 i 与 j 相遇之前,找到第一个比index小的数 //与此同时,将这个数复制到 i 所在的位置,并将 i 向后挪一个位置 if(i < j) { array[i++] = array[j]; } //从 i 从前往后遍历,找到第一个比index大的数 while(i < j && array[i] < index) { i++; } //如果在下标 i 与 j 相遇之前,找到第一个比index大的数 //与此同时,将这个数复制到 j 所在的位置,并将 j 向后前一个位置 if(i < j) { array[j--] = array[i]; } } array[i] = index; sort(array, low, i - 1); sort(array, i + 1, high); } void QuickSort(int array[], int len) { sort(array, 0, len - 1 ); } int main() { int i, length; int a[] = {28, 17, 6, 18, 37, 3, 20, 31}; length = sizeof(a) / sizeof(a[0]); QuickSort(a, length); for(i = 0; i < length ; i++) { printf("%d ", a[i]); } return 0; }
相关文章推荐
- (排序)用C语言实现的快速排序(交换排序)
- 算法导论之插入排序,选择排序,归并排序,冒泡排序,希尔排序,堆排序,快速排序的c语言实现
- 排序系列之(3)快速排序及C语言实现
- 用c语言实现冒泡排序,选择排序,快速排序
- 算法导论之插入排序,选择排序,归并排序,冒泡排序,希尔排序,堆排序,快速排序的c语言实现
- 参考C语言的qsort函数实现一个一个能对任意数据类型(包括结构体)的数组进行排序的函数(里面用的不是快速排序)
- 排序(5)---------快速排序(C语言实现)
- C语言实现选择排序、冒泡排序和快速排序的代码示例
- 用JAVA实现排序算法之四:快速排序
- Python实现快速排序和插入排序算法及自定义排序的示例
- 选择排序--c语言实现
- 排序——快速排序(C++实现)
- C语言链表中数组实现数据选择排序,升序、降序功能主要难点
- 快速排序及C语言实现
- 最简单之Java实现冒泡排序、选择排序、插入排序、希尔排序、归并排序和快速排序(转载请注明出处)
- 数据结构 快速排序(用C语言实现)
- C语言实现直接插入排序
- java实现冒泡排序,选择排序,直接插入排序,快速排序
- 基数排序-C语言实现
- 利用c语言的qsort与bsearch实现排序与查找