Written by Robert_Wang in Southwest University of Science And Technology.
#include<iostream>
#include<algorithm>
using namespace std;
void InsertSort(int data[], int n)
{
int p = 1, i, j, temp;
for (i = 1; i < n; i++)
{
for (j = i - 1; j >= 0; j--)
{
if (data[j] <= data[j + 1]) break;
swap(data[j], data[j + 1]);
}
}
}
/*
归并排序——分治法
*/
void mergeSrot(int data[], int start, int end)
{
if (start >= end) return;
int mid = (start + end) / 2;
mergeSrot(data, start, mid);
mergeSrot(data, mid+1, end);
int *tem = new int[end+1];
int p1 = start;
int p2 = mid + 1;
int p3 = 0;
while (p1 <= mid && p2 <= end)
{
if (data[p1] < data[p2]) {
tem[p3++] = data[p1++];
}else {
tem[p3++] = data[p2++];
}
}
while (p1 <= mid) tem[p3++] = data[p1++];
while (p2 <= end) tem[p3++] = data[p2++];
int i;
for (i = start; i <= end; i++) data[i] = tem[i - start];
delete[] tem;
}
//线段树区间分心
void quicksort1(int data[], int left, int right)
{
if (left >= right) return;
int p = left;
int i;
for (i = left; i <= right; i++)
{
if (data[i] < data[p])
{
swap(data[i], data[p]);
swap(data[p + 1], data[i]);
p++;
}
}
quicksort1(data, left, p - 1);
quicksort1(data, p+1, right);
}
void quicksort2(int data[], int left, int right)
{
if (left >= right) return;
int i = left, j = right;
int temp = data[i];
while (i<j)
{
while (i < j && data[j] > temp)
j--;
while (i < j && data[i] < temp)
i++;
if (i < j) swap(data[i], data[j]);
}
data[i] = temp;
quicksort2(data, left, i-1);
quicksort2(data, i+1, right);
}
/*
希尔排序:把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。
*/
void shellSort(int data[],int n)//这是一种不稳定的排序方法
{
int gap;
int i, j;
for (gap = n / 2; gap > 0; gap /= 2)//间隔所变化的次数
{
for (i = gap; i < n; i++)//间隔的数处理
{
int j = i;
for (j = i; j - gap >= 0, data[j] < data[j - gap]; j -= gap) swap(data[j], data[j - gap]);
}
}
}
int main()
{
int data[100];
int i, n;
cin >> n;
for (i = 0; i < n; i++) cin >> data[i];
//quicksort1(data, 0, n - 1);
//quicksort2(data, 0, n - 1);
//shellSort(data, n);
//InsertSort(data, n);
//mergeSrot(data, 0, n - 1);
for (i = 0; i < n; i++) cout<<data[i]<<" ";
return 0;
}