插入排序

来源:互联网 发布:特别搞笑的网络歌曲 编辑:程序博客网 时间:2024/06/05 00:49

直接插入排序与折半插入排序:

#include <iostream>using namespace std;//直接插入排序void InsertSort(int *arr,int size){    int j;    if(!arr)        return ;    for (int i=1;i<size;i++)    {        int tmp = arr[i];        for (j = i-1; j>=0 && tmp < arr[j];j--)        {            arr[j+1] = arr[j];        }        arr[j+1] =tmp ;    }}/// 二分插入排序void BInsertSort (int * arr,int size){    if(!arr)        return ;for (int i =1 ;i<size ;i++)    {        int tmp = arr[i];        //二分查找来确定欲插入元素的应在位置        int low =0,high = i-1 ,mid ;        while (low<= high)        {            mid= (low+high)/2;            if(arr[i]<arr[mid])                high = mid-1;            else                low = mid +1 ;        }        for (int j =i-1 ;j>=low;j--)        {            arr[j+1]= arr[j];        }        arr[low]= tmp ;    }}void output(int *a, int len){    for(int i = 0; i < len; ++i)    {        cout << a[i] << " ";    }    cout << endl;}int main(){    int a[] = {6, 9, 1, 3, 6, 8, 9, 4};    int len =  sizeof(a) / sizeof(int);    output(a, len);    InsertSort(a,len);    output(a, len);    BInsertSort(a,len);    output(a, len);}

希尔排序:

#include <iostream>#include <stdlib.h>using namespace std;void ShellInsert(int *arr ,int size ,int delta){    int j;    for (int i = delta;i<size;i++)    {        int tmp = arr[i];        for (j = i-delta; j>=0 && tmp < arr[j];j-=delta)        {            arr[j+delta] = arr[j];        }        arr[j+delta] = tmp ;    }}void ShellSort(int * arr,const int size){    if(!arr)        return ;    int increment = size ;    do {        increment = increment/3 +1;        ShellInsert(arr,size,increment);    } while(increment>1);}void output(int *a, int len){    for(int i = 0; i < len; ++i)    {        cout << a[i] << " ";    }    cout << endl;}int main(){    int a[] = {6, 9, 1, 3, 6, 8, 9, 4};    int len =  sizeof(a) / sizeof(int);    output(a, len);    ShellSort(a,len);    output(a, len);}
0 0
原创粉丝点击