快速排序實現

#include <iostream>
#include <vector>
#include <cstdlib>
using namespace std;

//兩個版本
void show(vector<int> &v)
{
	vector<int>::iterator pos;
	for(pos = v.begin();pos != v.end();pos++)
		cout<<*pos<<" ";
	cout<<endl;
}
//第一個版本算法導論上面的那個

int partition1(vector<int> &v,int l,int r)
{
	int temp;
	int i = l-1;
	for(int j = l;j < r;j++)
	{
		if(v[j] <= v[r])
		{
			i++;
			temp = v[i];
			v[i] = v[j];
			v[j] = temp;
		}
	}
	temp = v[i+1];
	v[i+1] = v[r];
	v[r] = temp;
	return i+1;
}

void quickSort1(vector<int> &v,int l,int r)
{
	if(l < r)
	{
		int m = partition1(v,l,r);
		quickSort1(v,l,m-1);
		quickSort1(v,m+1,r);
	}
}

//嚴蔚敏數據結構上的
int partition2(vector<int> &v,int l,int r)
{
	int key = v[l];
	int i = l;
	int j = r;
	while(i < j)
	{
		while(v[j] >= key&&j > i)
		{
			j--;
		}
		if(j>i)
			v[i] = v[j];
		while(v[i] <= key&&j > i)
		{
			i++;
		}
		if(j > i)
			v[j] = v[i];
	}
	v[j] = key;
	return j;
}

void quickSort2(vector<int> &v,int l,int r)
{
	if(l < r)
	{
		int m = partition2(v,l,r);
		quickSort2(v,l,m-1);
		quickSort2(v,m+1,r);
	}
}

void main()
{
	const int N = 200; 
	vector<int> v,v1;
	v.reserve(N);
	for(int i = 0;i<N;i++)
		v.push_back(rand()%100);
	cout<<"******************初始數據******************"<<endl;
	show(v);
	quickSort1(v,0,N-1);
	cout<<"******************排序數據******************"<<endl;
	show(v);
	v1.reserve(N);
	for(int i = 0;i<N;i++)
		v1.push_back(rand()%100);
	cout<<"******************初始數據******************"<<endl;
	show(v1);
	quickSort2(v1,0,N-1);
	cout<<"******************排序數據******************"<<endl;
	show(v1);
	int m;
	cin>>m;
}

倒騰了一下   兩種版本的快排   回來再說吧!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章