二分法插入排序是在插入第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;}
新聞熱點
疑難解答