二分法插入排序是在插入第i个元素时,对前面的0~i-1元素进行折半,先跟他们中间的那个元素比,如果小,则对前半再进行折半,否则对后半进行折半,直到left>right,然后再把第i个元素前1位与目标位置之间的所有元素后移,再把第i个元素放在目标位置上。
/*****************************************************
copyright (C), 2016-2017, Lighting Studio. Co., Ltd. :File name:Author:luoye Version:0.1 Date: Description:Funcion List: *****************************************************/#include <stdio.h>#define N 10 //定义数组大小void fun(int a[], int low, int high) //排序函数 { int mid, temp; int i, j; for( i = 1; i < N; i++) { temp = a[i]; high = i - 1; low = 0; while( low <= high) { mid = (low + high)/2; if( temp < a[mid]) { high = mid - 1; } else { low = mid + 1; } } for(j = i; j > low; j--) //把数组向后移动以便插入第i个数 { a[j] = a [j-1]; } a[low] = temp; }}int main(){ int a[N]; int i; int high = 0; int low = 0; PRintf("Please enter 10 numbers:"); for(i = 0; i < N; i++ ) { scanf("%d",&a[i]); } fun(a, high, low); for(i = 0; i < N; i++) { printf("%4d",a[i]); } printf("/n"); return 0;}
新闻热点
疑难解答