折半插入排序

来源:互联网 发布:飞鱼网络电视版本介绍 编辑:程序博客网 时间:2024/05/17 07:15

插入排序中要完成两种操作,找元素的插入位置 和 移动元素
折半插入排序,查找插入位置用折半查找,与直接插入排序比较看,减少了元素的比较次数,但没有改变元素的移动次数。

#include <iostream>using namespace std;//对于顺序表,折半插入排序void InsertSort(int a[], int n) {    int i, j, low, high, mid;    for (i = 2; i<n; i++)    {        a[0] = a[i];       //用a[0]记录保存待查入元素        low = 1; high = i - 1;        while (low <= high)        {            mid = (low + high) / 2;            if (a[mid]>a[0])                high = mid - 1;            else                low = mid + 1;        }        for (j = i - 1; j >= high + 1; --j)        {            a[j + 1] = a[j];//移动元素        }        a[high + 1] = a[0]; //赋值    }}int main(int argc, char const *argv[]){    int a[8] = { 0,4,1,12,43,2,8,10 };    int i;    InsertSort(a, 8);    for (i = 1; i<8; ++i)    {        cout << a[i] << endl;    }    system("pause"); //在vs上运行,需要加,不然会运行,之后闪退    return 0;}

运行结果

原创粉丝点击