#include <iostream>
using namespace std;
//插入排序(1)--直接排序,最差时间复杂度O(n^2)
//最好时间复杂度O(n),平均时间复杂度O(n^2),
//稳定,空间复杂度O(1)
void insertSort(int a[], int len) {
int i, j, key;
for (i = 1; i < len; ++i) {
key = a[i];
for ( j = i - 1; j >= 0; --j) {
if (a[j] > key)
a[j + 1] = a[j];
else
break;
}
a[j + 1] = key;
}
}
//插入排序(2)--二分插入排序,,时间复杂度O(n^2)
void binsertSort(int a[], int len) {
int i, j;
int low, high, mid;
int key;
for (i = 1; i < len; ++i) {
key = a[i];
low = 1; high = i - 1;
while (low <=high) {
mid = (low + high) / 2;
if (key < a[mid]) {
high = mid - 1;
}
else
low = mid + 1;
}
for (j = i - 1; j >= high + 1; j--) {
a[j + 1] = a[j];
a[high + 1] = key;
}
}
}
//插入排序(3)--希尔排序,最优时间复杂度O(n)
//最差时间复杂度O(n^2),平均时间复杂度O(nlog2N)
//不稳定,空间复杂度O(1)
void shellSort(int array[], int len) {
int i, j, gap;
for (gap = len / 2; gap > 0; gap /= 2) {//步长
for (i = 0; i < gap; i++) {
for (j = i + gap; j < len; j += gap) {
if (array[j] < array[j - gap]) {
int temp = array[j];
int k = j - gap;
while (k > 0 && array[k] > temp) {
array[k + gap] = array[k];
k -= gap;
}
array[k + gap] = temp;
}
}
}
}
}
void printOr(int array[], int len) {
for (int k = 0; k < len; k++) {
cout << array[k] << ",";
}
}
//输出1
void printFin_1(int array[], int len) {
for (int i = 0; i < len; ++i) {
cout << array[i] << ",";
}
cout << endl;
}
//输出2
void printFin_2(int array[], int len) {
for (int i = 0; i < len; ++i) {
cout << array[i] << ",";
}
cout << endl;
}
//输出3
void printFin_3(int array[], int len) {
for (int i = 0; i < len; i++) {
cout << array[i] << ",";
}
cout << endl;
}
int main() {
int array[] = { 4,8,7,11,2,25,27,1,18 };
int len = sizeof(array) / sizeof(int);
cout << "The orginal array is:" << endl;
printOr(array, len);
insertSort(array, len);
cout << "The insertsorted array is:" << endl;
printFin_1(array, len);
binsertSort(array, len);
cout << "The binsertsorted array is:" << endl;
printFin_2(array, len);
shellSort(array, len);
cout << "The shellsorted array is:" << endl;
printFin_3(array, len);
cin.get();
}
运行结果: