数据结构实验 折半插入排序

来源:互联网 发布:德国女人 下面知乎 编辑:程序博客网 时间:2024/05/19 13:08


排序方法之----折半插入排序

选择每一个数,然后通过折半查找找到需要插入到的位置.

按照折半插入排序


分析:

折半查找以后,应该插入的位置应该是low,或者high+1 ,因为每次跳出while循环后的low都是在high的右边一位.不能用mid表示,各种情况得到的mid不一样

注意:

这个适用于以下这种形式

while (low <= high){mid = (low + high) / 2;if (x[i] > x[mid])low = mid + 1;elsehigh = mid - 1;}






#include <iostream>#include <cstring>#include <string>using namespace std;/* * 名称: 二叉排序树的查找 * 方法: 先创建一个BST,然后对其进行查找,插入,删除, * 专业: 软件工程 *  by : mazicwong *//* 测试数据   3 6 9 8 7 5 4 1 2 0/*折半插入排序,即当第i个元素需要插入排序的时候,前面的i-1个数都是排序好的,这时候通过折半查找找到需要插入的地方*/const int maxn = 10;//数组中的数int main(){int x[maxn];for (int i = 0; i < maxn; i++)scanf("%d", &x[i]);for (int i = 1; i < maxn; i++)  //把1~maxn-1的数都插入到最前面的序列{int low = 0;int high = i - 1;int mid;while (low <= high)  //查找完以后,要插入的位置在high+1那里{mid = (low + high) / 2;if (x[i] > x[mid])low = mid + 1;elsehigh = mid - 1;}//查找完以后,应该插入的位置在low或者high+1那里,因为退出查询时候low一定在high右边一位//所以,从0~low-1不变 , 从low到i-1往后移动int key = x[i];for (int j = i-1; j >= low; j--)x[j+1] = x[j];x[low] = key;}for (int i = 0; i < maxn; i++)printf("%d ", x[i]);return 0;}






0 0
原创粉丝点击