c_cpp 【分治法】快速排序【2.8】
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 【分治法】快速排序【2.8】相关的知识,希望对你有一定的参考价值。
//2d8-2 随机后标记元素后的快速排序
#include "stdafx.h"
#include <iostream>
#include <ctime>
using namespace std;
int a[] = {5,7,3,4,8,6,9,1,2};
template <class Type>
void Swap(Type &x,Type &y);
inline int Random(int x, int y);
template <class Type>
int Partition(Type a[],int p,int r);
template<class Type>
int RandomizedPartition(Type a[],int p,int r);
template <class Type>
void RandomizedQuickSort(Type a[],int p,int r);
int main()
{
for(int i=0; i<9; i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
RandomizedQuickSort(a,0,8);
for(int i=0; i<9; i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
}
template <class Type>
void Swap(Type &x,Type &y)
{
Type temp = x;
x = y;
y = temp;
}
inline int Random(int x, int y)
{
srand((unsigned)time(0));
int ran_num = rand() % (y - x) + x;
return ran_num;
}
template <class Type>
int Partition(Type a[],int p,int r)
{
int i = p,j = r + 1;
Type x = a[p];
while(true)
{
while(a[++i]<x && i<r);
while(a[--j]>x);
if(i>=j)
{
break;
}
Swap(a[i],a[j]);
}
a[p] = a[j];
a[j] = x;
return j;
}
template<class Type>
int RandomizedPartition(Type a[],int p,int r)
{
int i = Random(p,r);
Swap(a[i],a[p]);
return Partition(a,p,r);
}
template <class Type>
void RandomizedQuickSort(Type a[],int p,int r)
{
if(p<r)
{
int q = RandomizedPartition(a,p,r);
RandomizedQuickSort(a,p,q-1);
RandomizedQuickSort(a,q+1,r);
}
}
//2d8-1 未优化的快速排序
#include "stdafx.h"
#include <iostream>
using namespace std;
int a[] = {5,7,3,4,8,6,9,1,2};
template <class Type>
void Swap(Type &x,Type &y);
template <class Type>
int Partition(Type a[],int p,int r);
template <class Type>
void QuickSort(Type a[],int p,int r);
int main()
{
for(int i=0; i<9; i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
QuickSort(a,0,8);
for(int i=0; i<9; i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
}
template <class Type>
void Swap(Type &x,Type &y)
{
Type temp = x;
x = y;
y = temp;
}
template <class Type>
int Partition(Type a[],int p,int r)
{
int i = p,j = r + 1;
Type x = a[p];
while(true)
{
while(a[++i]<x && i<r);
while(a[--j]>x);
if(i>=j)
{
break;
}
Swap(a[i],a[j]);
}
a[p] = a[j];
a[j] = x;
return j;
}
template <class Type>
void QuickSort(Type a[],int p,int r)
{
if(p<r)
{
int q = Partition(a,p,r);
QuickSort(a,p,q-1);
QuickSort(a,q+1,r);
}
}
以上是关于c_cpp 【分治法】快速排序【2.8】的主要内容,如果未能解决你的问题,请参考以下文章
算法学习---分治法和快速排序
分治法以及快速排序
数据结构 8 基础排序算法详解快速排序的实现了解分治法
分治法应用之二分查找 快速排序递归排序
排序算法之快速排序
快速排序(分治法)