C++代码实现快速排序

#include <iostream>
using namespace std;
// quick sort
//另外,如果数组是引用传递可以通过函数模板的实参推断来自动获得它长度
template<typename T,int N>
void printArr(T (&arr)[N])
{
   int i = 0;
   while(i<N)
   {
	   cout << arr[i] <<" ";
	   i++;
   }
   cout <<endl;
}

void swap(int &p,int &q)
{
	int temp = p;
	p= q;
	q=temp;
}
int getIndex(int arr[],int nLow,int nHigh)
{
	int nTemp = arr[nHigh];
	int j = nLow - 1;
	for(int i=nLow;i<nHigh;i++)
	{
		if ( arr[i] <= nTemp)
		{
            j=j+1;
			swap(arr[j],arr[i]);
		}
	}
	swap(arr[j+1],arr[nHigh]);
	return j+1;
}

void quickSort(int arr[],int nLow,int nHigh)
{
	if (nLow < nHigh)
	{
		int nIndex = getIndex(arr,nLow,nHigh);
		quickSort(arr,nLow,nIndex-1);
		quickSort(arr,nIndex + 1,nHigh);

	}
}

int main()
{

#ifdef __cplusplus
	cout <<"c++" <<endl;
#else
	cout <<"c " <<endl;
#endif
	int arr[] = {52,49,80,36,14,75,58,56,57,78,42,22,22,44};

	quickSort(arr,0,sizeof(arr)/sizeof(arr[0]));

	printArr(arr);

	return 0;
}

http://www.cnblogs.com/pugang/archive/2012/06/27/2565093.html

具体逻辑见上面的链接

时间: 2024-12-12 04:00:15

C++代码实现快速排序的相关文章

一行代码的快速排序

1.一维高斯函数: a表示得到曲线的高度,b是指曲线在x轴的中心,c指width(与半峰全宽有关),图形如下: . 2.根据一维高斯函数,可以推导得到二维高斯函数: 在图形上,正态分布是一种钟形曲线,越接近中心,取值越大,越远离中心,取值越小. 计算平均值的时候,我们只需要将"中心点"作为原点,其他点按照其在正态曲线上的位置,分配权重,就可以得到一个加权平均值.常用作图像平滑操作. 例如:通常,图像处理软件会提供"模糊"(blur)滤镜,使图片产生模糊的效果. &q

Ruby一行代码实现快速排序

1 def quick_sort(a) 2 3 return a if a.size < 2 4 5 (x = a.pop) ? quick_sort(a.select{|i| i <=x }) + [x] + quick_sort(a.select{|i| i > x}) : [] 6 7 end 8 9 array = [72,6,57,88,60,42,83,73,42,48,85] 10 11 p quick_sort(array) #=> [6, 42, 42, 48,

面试必考三大排序算法C++代码(快速排序、归并排序、堆排序)

前两个为C++风格代码,后一个为C风格代码,除了输入输出,其它无差别,但C输入输出要比C++更快. 快速排序 1 #include <iostream> 2 using namespace std; 3 4 void swap(int num[], int i, int j) 5 { 6 int temp = num[i]; 7 num[i] = num[j]; 8 num[j] = temp; 9 } 10 11 int partition(int num[], int left, int

丰富自己的代码库-快速排序

一些常用的代码,和demo一定要保留,对于一个程序员的成长就是不断 学习,实践,积累,除了少数的天才外, 绝大多数程序员的发展都要经历的几步,这里重点说一下积累,看到一些好的代码活着功能复杂的算法,方法,就把它收到自己的代码库里,至于自己的代码库 其实就是个本地文件夹,级别上应该跟 你自己的代码平级,建议存成.hpp文件,即头文件里包含实现,这样既保留了源码,也可以快速引用.同时这个文件夹最好添加的环境变量中,以便使用的时候直接引用 下面来说说放入代码库的第一个算法程序,快速排序,网上对于这个解

白话排序算法--快速排序

前言: 写到快速排序时,之前已经进行了冒泡.选择.插入排序,发现算法问题很多东西都是和实际问题相逆的,实际你可能会由外及里,由上及下,可是算法里面它有时就需要你由里往外去扩散,好比最里面的是小成果,然后一次次往外变化,成果也慢慢变大,最后直至达到最终成果为止.本篇快速排序方法因为调用了递归,你就可以逆着由里及外来思考问题. 写这篇文章光画图就花费了我2小时时间,越抽象就越不好形容和比喻,画的不好,希望各位不要吐槽. 快速排序:先快速排序将队列一分为二,然后对每个队列进行递归调用快速排序方法,直至

快速排序_QUICKSORT

快速排序 快速排序的基本思想 快速排序的代码实现 快速排序的性能分析 快速排序 快速排序是一个最坏情况时间复杂度为Θ(n2),最好情况下时间复杂度为O(nlogn)的排序算法.虽然在最坏情况下的时间复杂为n2,但是快速排序的平均性能非常好,只有Θ(nlogn),而且我们也可以主动避免快速排序的最差的情况,所以快速排序在排序作业中还是应用比较广泛的. 快速排序的基本思想 我们现在有一数组A={ai,ai+1,...,aj},假定我们将数组A排序得到数组B={bi,bi+1,...,bj} ,数组A

快速排序,C语言实现

排序法里比较出名的,具体的算法看下图: 这篇博客说的通俗易懂:http://blog.csdn.net/morewindows/article/details/6684558 这是快速排序的基础,用代码实现如下: void DiviedSort(int* arr_p,int start,int end) { int left,right,i=0; int pivot,result; bool flag; flag = TRUE; pivot = arr_p[start]; right = end

求出数组前面k个元素或数组中元素大于一半的元素(快速排序与堆排序的灵活运用)

写这个的目的在于,说明快速排序的灵活运用.我们来看下关于快速排序中的一部分关键代码: 快速排序代码: int a[101],n;//定义全局变量,这两个变量需要在子函数中使用 void quicksort(int left,int right) { int i,j,t,temp; if(left>right) return; temp=a[left]; //temp中存的就是基准数 i=left; j=right; while(i!=j) { //顺序很重要,要先从右边开始找 while(a[j

代码与算法集锦-归并排序+树状数组+快排+深度优先搜索+01背包(动态规划)

归并排序 求逆序数 归并排序是建立在归并操作上的一种有效的排序算法.该算法是采用分治法(Divide and Conquer)的一个非常典型的应用. 首先考虑下如何将将二个有序数列合并.这个非常简单,只要从比较二个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数.然后再进行比较,如果有数列为空,那直接将另一个数列的数据依次取出即可. //将有序数组a[]和b[]合并到c[]中 void MemeryArray(int a[], int n, int b[], int m, int c