1. 程式人生 > >(排序演算法)linux c語言實現二分插入排序演算法(簡化版本的插入排序演算法)

(排序演算法)linux c語言實現二分插入排序演算法(簡化版本的插入排序演算法)

 二分插入演算法是在已經排序好的序列裡插入一個元素,是穩定的演算法,關鍵詞是折中。

比如說我要在12345678910裡插入一個3,那麼我先看看中間的數比3大,還是比3小,要是比3大,我就去後一半,如果是比3小,我就去前一半,現在進入某個一半後,再做如此操作,最後將其他的元素依次往後挪一位就可以了。

二分插入演算法是沒有排序功能的,只有插入功能。

/***************************************************
##filename      : binaryinsert.c
##author        : GYZ                               
##e-mail        : 
[email protected]
##create time : 2018-10-31 09:54:39 ##last modified : 2018-11-02 12:18:44 ##description : NA ***************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <unistd.h> void binaryInsert(int a[],int n) { /*1,binary insert sort*/ int left,middle,right; int i,temp; left = 0; right = n-2; temp = a[n-1]; middle = (left + right)/2; while((middle >left) && (middle < right)) { if(a[middle] == temp) { break; } else if (a[middle] > temp) { right = middle; } else { left = middle; } middle = (left + right)/2; } /*2,move others to right*/ for(i = n-1; i > middle+1; i--) { a[i] = a[i-1]; } a[middle+1] = temp; /*straight insertion sort*/ /* int temp = 0; int i = 0,j = 0; for(i = 1; i < n; ++i) { temp = a[i]; for(j = i-1; j >= 0; --j) { if(temp < a[j]) { a[j+1] = a[j]; a[j] = temp; } else { break; } } }*/ } void printArr(int a[],int n) { int i; for(i = 0; i < n; i++) { printf("%d,",a[i]); } printf("\n"); } int main(int argc,char *argv[]) { int length = 0; int begin,end; int a[] = {1,2,3,4,5,6,7,8,9,10, 11,12,13,14,15,16,17, 18,19,20,21,22,23,24, 25,26,27,28,29,30,31,32,14}; length = sizeof(a) / sizeof(a[0]); begin = clock(); binaryInsert(a,length); end = clock(); printf("%d\n",end-begin); printArr(a,length); return 0; }