小白成长之路(5)--插入排序(直接插入,二分插入,希尔排序)

来源:互联网 发布:我的世界泰拉瑞亚js 编辑:程序博客网 时间:2024/06/08 06:01
#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] << ",";    }}//输出1void printFin_1(int array[], int len) {    for (int i = 0; i < len; ++i) {        cout << array[i] << ",";    }    cout << endl;}//输出2void printFin_2(int array[], int len) {    for (int i = 0; i < len; ++i) {        cout << array[i] << ",";    }    cout << endl;}//输出3void 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();}

运行结果:

这里写图片描述

阅读全文
0 0
原创粉丝点击