`
synchronized_lala
  • 浏览: 41447 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

快速排序

阅读更多
      在冒泡排序中,一次扫描只能确保最大数值的数移到正确位置,而待排序序列的长度可能只减少1。
      快速排序是对冒泡排序的一种本质改进。

      基本思想:分治法,通过一趟扫描后,使得排序序列的长度能大幅度地减少。快速排序通过一趟扫描,就能确保某个数(以它为基准点吧)的左边各数都比它小,右边各数都比它大。然后又用同样的方法处理它左右两边的数,直到基准点的左右只有一个元素为止。

     快速排序:不稳定,时间复杂度 最理想 O(nlogn) 最差时间O(n^2)

#include<iostream>
#include<cstring>

using namespace std;

int const ic_limit = 100002;

void vInputData(int &iNum,int iArr[]);
void vQuickSort(int iArr[],int iLeft,int iRight);
void vPrintAns(int iNum,int iArr[]);

int main()
{
	int iNum;
	int iArr[ic_limit];

	memset(iArr,0,sizeof(iArr));
	vInputData(iNum,iArr);
	vQuickSort(iArr,1,iNum);
	vPrintAns(iNum,iArr);

	return 0;
}

void vInputData(int &iNum,int iArr[])
{
	cin >> iNum;
	for(int i=1; i<=iNum; i++)
	{
		cin >> iArr[i];
	}
}

void vQuickSort(int iArr[],int iLeft,int iRight)
{
	int iKeyValue;
	int iLow;
	int iHigh;

	//以iKeyValue为基准
	iKeyValue = iArr[iLeft];
	iLow = iLeft;
	iHigh = iRight;
	while(iLow < iHigh)
	{
		while((iLow < iHigh) && (iArr[iHigh] >= iKeyValue))
		{
			iHigh --;
		}
		if(iLow < iHigh)
		{
			iArr[iLow] = iArr[iHigh];
			iLow ++;
		}
		while((iLow < iHigh) && (iArr[iLow] <= iKeyValue))
		{
			iLow ++;
		}
		if(iLow < iHigh)
		{
			iArr[iHigh] = iArr[iLow];
			iHigh --;
		}
	}
	iArr[iLow] = iKeyValue;

	if(iLeft < (iLow-1))
	{
		//对左区间递归排序
		vQuickSort(iArr,iLeft,iLow-1);
	}
	if((iLow+1) < iRight)
	{
		//对右区间递归排序
		vQuickSort(iArr,iLow+1,iRight);
	}
}

void vPrintAns(int iNum,int iArr[])
{
	for(int i=1; i<iNum; i++)
	{
		cout << iArr[i]  << " ";
	}
	cout << iArr[iNum] << endl;
}
 
分享到:
评论

相关推荐

    快速排序 快速排序例子

    ### 快速排序知识点解析 #### 一、快速排序简介 快速排序是一种高效的排序算法,由英国计算机科学家托尼·霍尔(Tony Hoare)在1960年提出。它采用分治策略来把一个序列分为较小和较大的两个子序列,然后递归地...

    C语言实现多种链表快速排序

    快速排序是一种高效的排序算法,由英国计算机科学家C.A.R. Hoare在1960年提出,它的基本思想是通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,然后分别对这两部分记录...

    快速排序 快速排序快速排序快速排序

    快速排序快速排序 快速排序 快速排序 快速排序 快速排序

    确定性快速排序与随机化快速排序的比较

    快速排序是一种高效的排序算法,在计算机科学和数学中被广泛研究。其基本原理是分治法策略,即将一组数据分为两个子序列并分别进行排序。快速排序期望的时间复杂度为O(nlogn),但在最坏的情况下,它的时间复杂度可...

    简单的快速排序

    快速排序是一种高效的排序算法,由英国计算机科学家C.A.R. Hoare在1960年提出。它的基本思想是分治法(Divide and Conquer),即把一个大问题分解成若干个小问题来解决,最终将小问题的结果合并得到原问题的解。在这...

    排序算法编程 堆排序 快速排序

    本主题将深入探讨四种常见的排序算法:堆排序、快速排序以及两种未在标题中明确提到但同样重要的排序方法——基数排序和计数排序。 首先,让我们详细了解一下堆排序。堆排序是一种基于比较的排序算法,利用了数据...

Global site tag (gtag.js) - Google Analytics