快速排序的C语言实现及其时间复杂度
2011-01-10 15:01
465 查看
快速排序:
其思想为:在一个序列中,我们指定一个数(比如a[0]),然后查看整个数列,让比a[0]小的数都放到a[0]之前,比a[0]大的数都放到a[0]之后,那么a[0]所在的位置就是排好序后它应该待的位置。然后我们再对这个处理过的数列的前半部分用快速排序的方法排序,对后半部分用快速排序的算法进行排序,这样整个数列就排好序了。
Base Case:如果被a[0]分成的两部分只有一个元素或者没有元素,那么说明这个序列就已经排好序了。
代码:
时间复杂度为Θ(nlgn)
其思想为:在一个序列中,我们指定一个数(比如a[0]),然后查看整个数列,让比a[0]小的数都放到a[0]之前,比a[0]大的数都放到a[0]之后,那么a[0]所在的位置就是排好序后它应该待的位置。然后我们再对这个处理过的数列的前半部分用快速排序的方法排序,对后半部分用快速排序的算法进行排序,这样整个数列就排好序了。
Base Case:如果被a[0]分成的两部分只有一个元素或者没有元素,那么说明这个序列就已经排好序了。
代码:
/*Quick sort *Author: Eric *Time: 2011.01.10 */ #include <stdio.h> /*Partion the position of the a[0], start and end is the true subscripes*/ int partition(int *a, int start, int end) { int i = start + 1, j = end; int temp = 0; while(i < j) { while(a[i] <= a[start]) //Find the first element bigger than a[start] i++; while(a[j] > a[start]) //Find the first element smaller or equal to a[start] j--; if(i <= j-1) { temp = a[i]; a[i] = a[j]; a[j] = temp; } if(i == j-1) break; else if(i > j-1) { i = j; break; } } if(a[i] <= a[start]) { temp = a[start]; a[start] = a[i]; a[i] = temp; } return i; } void quick_sort(int *a, int start, int end) { int mid = 0; if(end > start) { mid = partition(a, start, end); quick_sort(a, start, mid-1); quick_sort(a, mid+1, end); } } int main() { int a[100] = {5, 2, 4, 3, 1, 7, 2, 6, 18, 14, 5, 2, 4, 3, 1, 7, 2, 6, 18, 14,5, 2, 4, 3, 1, 7, 2, 6, 18, 14,5, 2, 4, 3, 1, 7, 2, 6, 18, 14, 5, 2, 4, 3, 1, 7, 2, 6, 18, 14,5, 2, 4, 3, 1, 7, 2, 6, 18, 14,5, 2, 4, 3, 1, 7, 2, 6, 18, 14, 5, 2, 4, 3, 1, 7, 2, 6, 18, 14,5, 2, 4, 3, 1, 7, 2, 6, 18, 14,5, 2, 4, 3, 1, 7, 2, 6, 18, 14}; quick_sort(a, 0, 99); printf("The a[100] is:"); int i = 0; for(i = 0; i < 100; i++) printf(" %d", a[i]); printf("\n"); return 0; }
时间复杂度为Θ(nlgn)
相关文章推荐
- 快速排序的实现与时间复杂度
- 快速排序和冒泡排序的时间复杂度分析(C++算法实现对比)
- C语言8种排序算法及其实现 1.希尔排序 2.二分插入法 3.直接插入法 4.带哨兵的直接排序法 5.冒泡排序 6.选择排序 7.快速排序 8.堆排序
- java版排序算法简介及冒泡排序以及优化,选择排序,直接插入排序,希尔排序,堆排序,快速排序及其优化前言 2 分类 2 稳定性 3 时间复杂度 4 Java实现版本 5 1、冒泡排序 6 2、选择排序
- C语言实现基本排序算法----排序(直接插入排序,SHELL排序,冒泡排序,快速排序,简单选择排序,堆排序)
- 辗转相除法 java 实现 及其时间复杂度证明
- 归并排序及其时间复杂度分析
- C语言实现单向链表及其各种排序(含快排,选择,插入,冒泡)
- 杨辉三角(Pascal Triangle)的几种C语言实现及其复杂度分析
- 归并排序及其时间复杂度分析
- 快速排序不同输入规模时间复杂度分析
- 杨辉三角(Pascal Triangle)的几种C语言实现及其复杂度分析
- 快速排序 的原理及其java实现(递归与非递归)
- C语言选择排序详解及其实现
- 快速排序的c语言实现代码
- 快速排序--C语言实现、python实现
- c语言实现快速排序
- 快速排序,C语言实现
- 快速排序详解--C语言实现
- 快速排序的几个实现及其在效率上的考虑