快速排序(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);


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

相关文章推荐

快速排序C实现 quick sort

  • 2011年07月22日 15:34
  • 799B
  • 下载

快速排序(Quick Sort) Java实现

快速排序(Quick Sort) 快速排序(Quick Sort)的基本思想是:通过一趟排序将待排记录分割成独立的两部分其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行...

快速排序(Quick_Sort)

我个人认为,快速排序是一个十分经典的排序方法,

快速排序(Quick Sort)

一、算法原理设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键 数据,然后将所有比它小的数据放到它前面,所有比它大的数据放到它后...

快速排序quick sort

.. public class QuickSort { public static int partition(int[] ints, int left, int right){ int b...

Java 快速排序 (Quick Sort)

含义 算法描述 代码实现Java含义快速排序(Quicksort)是对冒泡排序的一种改进。快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序n个项目要Ο(n log n)次比较。在最坏状况...

怎样让快速排序(quick sort)更快?

快速排序(quick sort)是目前应用最广泛的排序算法,它的平均复杂度为O(NlogN),但因其内循环较小,所以速度很快,而且不需要太多额外的空间(主要是递归调用所需的栈空间,对于随机文件不大于l...

快速排序(quick-sort)

今儿闲着没事儿看了一眼c++primer
  • bdss58
  • bdss58
  • 2014年10月06日 18:01
  • 484

快速排序Quick sort

快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:快速排序(Quick sort)
举报原因:
原因补充:

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