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 基础排序算法详解快速排序的实现了解分治法

分治法应用之二分查找 快速排序递归排序

排序算法之快速排序

快速排序(分治法)