C/C++程序员:基本排序算法之快速排序
来源:互联网 发布:软件过程管理 电子书 编辑:程序博客网 时间:2024/06/05 00:56
快速排序
10 80 30 60 50 40 70 20 90
^
10 30 40 20 50 70 90 80 60
^ ^
10 20 30 40 50 70 60 80 90
1)算法
A.从待排序序列中任意选择一个元素,作为基准;
B.将所有小于基准的元素放在基准之前,大于基准的元素放在
基准之后,等于基准的元素放在基准之前或之后,这个过程
成为分组;
C.以递归的方式,分别对基准之前和基准之后的分组继续进行
分组,直到每个分组内的元素个数不多于一个为止。
就地分组:
50
10 20 30 40 50 80 70 60 90
i
p
j
2)评价
A.平均时间复杂度:O(NlogN)
B.非稳定排序。
C.如果每次都能均匀分组,可以达到最快的排序效果。选择中间
10 80 30 60 50 40 70 20 90
^
10 30 40 20 50 70 90 80 60
^ ^
10 20 30 40 50 70 60 80 90
1)算法
A.从待排序序列中任意选择一个元素,作为基准;
B.将所有小于基准的元素放在基准之前,大于基准的元素放在
基准之后,等于基准的元素放在基准之前或之后,这个过程
成为分组;
C.以递归的方式,分别对基准之前和基准之后的分组继续进行
分组,直到每个分组内的元素个数不多于一个为止。
就地分组:
50
10 20 30 40 50 80 70 60 90
i
p
j
2)评价
A.平均时间复杂度:O(NlogN)
B.非稳定排序。
C.如果每次都能均匀分组,可以达到最快的排序效果。选择中间
位置作为基准,产生均匀分组的概率最高。
#include <stdio.h>#include <stdlib.h>/* 快速排序 */void quick_sort (int data[], size_t left,size_t right) {size_t p = (left + right) / 2;int pivot = data[p];size_t i = left, j = right;while (i < j) {for (; ! (i >= p || pivot < data[i]); ++i);if (i < p) {data[p] = data[i];p = i;}for (; ! (j <= p || data[j] < pivot); --j);if (j > p) {data[p] = data[j];p = j;}}data[p] = pivot;if (p - left > 1)quick_sort (data, left, p - 1);if (right - p > 1)quick_sort (data, p + 1, right);}/* 测试用例 */int main (void) {srand (time (NULL));int data[10];size_t i, size = sizeof(data) / sizeof(data[0]);for (i = 0; i < size; ++i)printf ("%2d ", data[i] = rand () % 100);printf ("\n");quick_sort (data, 0, size - 1);for (i = 0; i < size; ++i)printf ("%2d ", data[i]);printf ("\n");return 0;}
0 0
- C/C++程序员:基本排序算法之快速排序
- C/C++程序员:基本排序算法之插入排序
- C/C++程序员:基本排序算法之选择排序
- c--经典算法之排序---快速排序
- 排序算法 - 快速排序(C++)
- C++快速排序算法
- 快速排序算法 C
- C快速排序算法
- C快速排序算法
- 算法导论 之 快速排序[C语言]
- C语言算法之快速排序
- C/C++程序员:排序算法之冒泡
- 排序算法之快速排序(Quicksort) (C语言)
- 常用排序算法之快速排序c及lua实现
- 基本算法之快速排序
- 基本排序算法之快速排序
- java基本排序算法之快速排序
- C#.NET快速排序算法
- 简单的具有shell功能的web服务器(带有缓存加速访问的功能)
- 分类排序问题
- 深入理解面向对象原理(一)
- TLD算法的崩溃问题
- 将博客搬至CSDN
- C/C++程序员:基本排序算法之快速排序
- 矩阵相加
- 安卓系统的账户与同步
- IOS如何将获取的13位时间戳转化为标准时间
- NYOJ 595 乱七八糟
- JSON与XML的区别比较
- 树上的鸟儿貌似在学树下一队情侣说话
- 【Linux】linux下gcc编译器的使用
- NOR和NAND