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; }