#ifndef _SORT_
#define _SORT_
#include <iostream>
#include <ctime>
using namespace std;
void TestSort();
int Partition(int *arr, int left, int right);
int Partition2(int *arr, int left, int right);
void QuickSort1(int *arr, int left, int right);
void Swap1(int &left, int &right);
#endif
#include "7_Sort.h"
void TestSort()
{
//cout << "Test Sort" << endl;
int arr[5] = {7, 3, 4, 6, 5};
Partition(arr, 0, 4);
}
int Partition(int *arr, int left, int right)
{
// 算法导论方法
//
int i = left - 1;
int j = left;
// 随机从left到right中挑选一个
srand(time(NULL));
int randNum = left + (rand() % (right - left + 1));
// 将randNum与right交换,right位置存放分界数
Swap1(arr[randNum], arr[right]);
// 分界数
int part = arr[right];
while (j < right )
{
if (arr[j] < part)
{
Swap1(arr[++i], arr[j]);
}
j++;
}
Swap1(arr[++i], arr[right]);
return i;
}
void QuickSort1(int *arr, int left, int right)
{
int middle = Partition(arr, left, right);
QuickSort1(arr, left, middle - 1);
QuickSort1(arr, middle + 1, right);
}
void Swap1(int &left, int &right)
{
交换双方不能相等
//if (left == right)
//{
// return;
//}
//left = left ^ right;
//right = left ^ right;
//left = left ^ right;
int tmp = left;
left = right;
right = tmp;
}
int Partition2(int *arr, int left, int right)
{
// 随机从left到right中挑选一个
srand(time(NULL));
int randNum = left + (rand() % (right - left + 1));
// 将randNum与right交换,right位置存放分界数
Swap1(arr[randNum], arr[right]);
int sIndex = left;
int eIndex = right - 1;
// 分界数
int part = arr[right];
while (sIndex <= eIndex)
{
while (arr[sIndex] < part)
{
sIndex++;
}
while (arr[eIndex] >= part)
{
eIndex--;
}
if (sIndex < eIndex)
{
Swap1(arr[sIndex], arr[eIndex]);
}
}
Swap1(arr[sIndex], arr[right]);
return sIndex;
}
#ifndef _SORT_#define _SORT_#include #include using namespace std;void TestSort();int Partition(int *arr, int left, int right);int Partition2(int *arr, int left, int right);void QuickSor