快速排序(Quick sort)

原创 2016年05月31日 16:43:35

基本思想 将一个将要排序的数据分割成独立的两部分,其中的一部分的所有数据都要比另外一部分的所有数据要小。之后再对这两部分分别继续递归地执行相同的方式直到排序完成。

如果快速排序处在最坏情况下的话,其时间复杂度和冒泡排序相同。O(n2)

平均的性能而言,其查找速度的时间复杂度为O(nlogn),是处在几种排序算法中效率最高的。


其采用的核心思想 分治法

1 问题分解为规模更小的子问题。

2 这些子问题逐个击破。

3 将解决掉的子问题合并最终得出问题的解。


分治法和递归经常同时应用在算法的设计中。



算法原理 将要排序的数组中任意选取一个数据(通常是数组的第一个数),将比此数小的放到其左边,然后再将比其大的数放置其右边。然后对得出的左右两个结果再继续重复执行此算法直到全数组排序完成。


具体实现方式  1 取出对比值(一般为数组的第一个值) 

                        2 先从数组的后边往前遍历寻找比对比值小的数,找到的话将找到的数的位置和对比值对换。

                        3 从数组的前边往后遍历寻找比对比值大的数,找到的话将找到的数的位置和对比值对换。

                        4 将数组内的值全部对比一次从而根据对比值分出两个部分。

                        5  之后再对分出的两个部分在进行第一步到第四步的操作。


C语言代码实现如下


void quickSort(int *array, int left, int right) {
	// 对数组的所有元素进行过一次排序后,最后其左右坐标或者相等
	if (left >= right) {
		return;
	}

	int i = left;
	int j = right;
	int pivot = array[left];

	while (i < j) {
		// 寻找结束的条件 找到一个大于pivot的数
		// 如果左坐标等于右坐标的时候,证明对数组的所有元素进行过完了一次排序
		while (i < j && pivot <= array[j]) {
			// 向前寻找
			j--;
		}

		a[i] = a[j];

		// 寻找结束的条件 找到一个小于pivot的数
		// 如果左坐标等于右坐标的时候,证明对数组的所有元素进行过完了一次排序
		while (i < j && pivot >= array[i]) {
			// 向后寻找
			i++;
		}
		a[j] = a[i];
	}

	// 当最后 i = j 的时候,证明数据的一次全元素和pivot的比较完成
	// 将对比的pivot值放到最后空出来的那个位置
	array[i] = pivot;

	quickSort(array, left, i - 1);
	quickSort(array, i + 1, right);
}

int array[6] = {1, 5, 8, 2, 10, 3};
quickSort(array, 0, 6 - 1);


版权声明:本文为博主原创文章,未经博主允许不得转载。

快速排序quick_sort(python的两种实现方式)

排序算法有很多,目前最好的是quick_sort:unstable,spatial complexity is nlogN. 快速排序原理python实现严蔚敏的 datastruct书中有伪代码实现...
  • longshenlmj
  • longshenlmj
  • 2016年06月08日 15:41
  • 6287

数据结构 - 快速排序(Quick Sort) 详解 及 代码(C++)

快速排序(Quick Sort) 详解 及 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy 快速排序(Quick Sort): 通过一趟排序...
  • u012515223
  • u012515223
  • 2014年04月25日 17:18
  • 4188

【内部排序】五:快速排序(Quick Sort)详解与代码

接着上一篇,这篇详解快速排序。快速排序是由冒泡排序改进而得的,采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。 分治法的基本思想    分治法的基本思想是:...
  • zhoubin1992
  • zhoubin1992
  • 2015年04月20日 22:51
  • 1456

排序算法之快速排序<Quick_Sort>及其C语言代码实现

快速排序(Quicksort)是对冒泡排序的一种改进。 快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比...
  • gl486546
  • gl486546
  • 2017年05月28日 16:33
  • 558

快速排序(Quicktsort)之Java实现

快速排序算法介绍 快速排序和归并排序都使用分治法来设计算法,区别在于归并排序把数组分为两个基本等长的子数组,分别排好序之后还要进行归并(Merge)操作,而快速排序拆分子数组的时候显得更有艺术,取一个...
  • kimylrong
  • kimylrong
  • 2013年12月05日 13:14
  • 42666

交换排序—快速排序(Quick Sort)

基本思想通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行分割,直到所有的数据都呈有序排列为止。其基本思路如下图所示...
  • u012434102
  • u012434102
  • 2015年05月11日 21:20
  • 289

深入解析快速排序(Quick Sort)

快速排序是由图灵奖获得者、计算机语言设计大佬C. A. R. Hoare在他26岁时提出的。说起C. A. R. Hoare老爷爷,可能很多人的第一印象就是快速排序,但是快排仅仅是他人生中非常小的成就...
  • utimes
  • utimes
  • 2016年08月10日 14:03
  • 1836

quick_sort(快速排序)c语言实现

晚上看算法导论,复习了一下快速排序。 快速排序最坏运行效率为o(n2),就是它已经排序好的情况下。 算法c语言代码如下 /***************************************...
  • way88liu
  • way88liu
  • 2015年07月08日 09:56
  • 998

常见排序算法 - 快速排序 (Quick Sort)

文章转载:http://bubkoo.com/2014/01/12/sort-algorithm/quick-sort/#javascript-语言实现 快速排序是图灵奖得主 C. ...
  • taotoxht
  • taotoxht
  • 2017年01月07日 01:13
  • 497

MergeSort与QuickSort的详细分析

 MergeSort和QuickSort是两种比较类似的sort方式,他们都是通过Divide and Conquer来实现的。都需要使用recursion的方式进行排序。他们的相同之处在于原理上一致...
  • qt_pixie
  • qt_pixie
  • 2006年11月02日 03:06
  • 8062
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:快速排序(Quick sort)
举报原因:
原因补充:

(最多只允许输入30个字)