#include <iostream>
#include <algorithm>
using namespace std;
//快速顺序
void swap(int* arr, int index1, int index2)
{
int temp = arr[index1];
arr[index1] = arr[index2];
arr[index2] = temp;
}
int partition(int* arr, int L, int R)
{
int more = R;
while (L < more)
{
if (arr[L]>arr[R])
swap(arr, L, --more);
else
L++;
}
swap(arr, more, R);
return more;
}
void quicksort(int*arr, int L, int R)
{
if (L < R)
{
int mid = partition(arr, L, R);
quicksort(arr, L, mid - 1);
quicksort(arr, mid + 1, R);
}
}
//归并排序
void merge(int* arr, int L, int M, int R)
{
int *help = new int[R - L + 1];
int t = 0;
int i = L;
int j = M + 1;
while (i <= M && j <= R)
{
help[t++] = arr[i] < arr[j] ? arr[i++] : arr[j++];
}
while (i <= M)
{
help[t++] = arr[i++];
}
while (j <= R)
{
help[t++] = arr[j++];
}
for (int t = 0; t <= (R - L); t++)
arr[L + t] = help[t];
}
void sortprocess(int* arr, int L, int R)
{
if (L == R)
{
return;
}
int mid = L + (R - L) / 2;
sortprocess(arr, L, mid);
sortprocess(arr, mid + 1, R);
merge(arr, L, mid, R);
}
void merfesort(int* arr, int n)
{
if (arr == NULL || n < 2)
return;
sortprocess(arr, 0, n - 1);
}
//堆排序
//输出序列
void printout(int* arr,int N)
{
for (int i = 0; i < N; i++)
cout << arr[i] << " ";
cout << endl;
}
void run(int* arr,int n,int N)
{
if (N - 1 == n)
{
printout(arr, N);
return;
}
for (int i = n; i < N; i++)
{
swap(arr, n, i);
run(arr, n + 1, N);
swap(arr, n, i);
}
}
void print(char s[]){
char *p = s;
while (*p != '\0'){
cout << *p;
p++;
}
cout << endl;
}
void swap(char s[], int l, int i)
{
char temp = s[l];
s[l] = s[i];
s[i] = temp;
}
void perm(char s[], int L, int R){
if (L == R){
print(s);
return;
}
for (int i = L; i <= R; i++){
swap(s, L, i);
perm(s, L + 1, R);
swap(s, L, i);
}
}
int main()
{
char str[] = "123";
perm(str, 0, 2);
int ar[] = { 1, 2, 3, 4};
int n = sizeof(ar) / sizeof(int);
run(ar, 0, n);
int arr[] = { 2, 8, 7, 1, 3, 4, 2, 9, 7, 1, 5, 12 };
int num = sizeof(arr) / sizeof(int);
merfesort(arr, num);
cout << "归并排序结果:";
for (int i = 0; i < num; i++)
{
cout << arr[i] << " ";
}
cout << endl;
quicksort(arr, 0, num-1);
cout << "快速排序结果:";
for (int i = 0; i < num; i++)
{
cout << arr[i] << " ";
}
cout << endl;
system("pause");
return 0;
}