现在的位置: 首页 > 综合 > 正文

快速排序

2018年04月13日 ⁄ 综合 ⁄ 共 802字 ⁄ 字号 评论关闭

一、快速排序算法的基本特性

时间复杂度:O(n*lgn)

最坏:O(n^2)

空间复杂度:O(n*lgn)

不稳定。

快速排序是一种排序算法,对包含n个数的输入数组,平均时间为O(nlgn),最坏情况是O(n^2)。

通常是用于排序的最佳选择。因为,基于比较的排序,最快也只能达到O(nlgn)

二、快速排序算法的描述

算法导论,第7章

快速排序时基于分治模式处理的,

对一个典型子数组A[p...r]排序的分治过程为三个步骤:

1.分解:

A[p..r]被划分为俩个(可能空)的子数组A[p ..q-1]和A[q+1 ..r],使得

A[p ..q-1] <= A[q] <= A[q+1 ..r]

2.解决:通过递归调用快速排序,对子数组A[p ..q-1]和A[q+1 ..r]排序。

3.合并。

三、快速排序算法

#include<iostream>
#include <assert.h>
using namespace std; 
void quicksort(int *a, int begin, int end)
{
	assert(a!=nullptr);
	int key = a[begin];
	int i = begin, j = end;
	if (i==j)
	{
		return;
	}	
	while(i<=j&&i>=0&&j>=0)
	{
		while (key<=a[j]&&i<j)
		{
			j--;
		}
		if (i<j)
		{
			swap(a[i],a[j]);
			i++;
		}
		while(a[i]<=key)
		{
			i++;
		}
		if (i<j)
		{
			swap(a[j],a[i]);
			j--;
		}
	}
	if(j > 1)
		quicksort(a, begin,j-1);
	if(end - j > 1)
		quicksort(a, j+1, end); 
}
int main()
{
	int a[10] = {11, 25, 10, 4, 88, 2, 108, 3, 2, 21};
	quicksort(a, 0, 9);
	for(int i = 0; i < 10; i++)
	{
		cout << a[i] <<endl;
	}
	return 0;
}

抱歉!评论已关闭.