拆半插入——BinarySort
阿新 • • 發佈:2018-12-17
package sort.com;
public class BinarySort {
/**
* 程式入口方法
* 拆半插入(二分法拆入)相當於將原來的資料序列從中間一分為二,利用中間的索引
* 改變左右序列的索引值,一直進行到找到合適的插入位置
*/
public static void main(String[] args) { int [] a = {8,2,-3,-15,21,0,99,-124}; for(int i=1; i < a.length; i++){ //將要排序的資料元素進行儲存 int temp=a[i]; //定義左,右兩個索引 int leftIndex = 0; int rightIndex = i-1; //判斷左右索引是否滿足條件 while(leftIndex<=rightIndex){ //定義一箇中間的索引,用來動態的修改左右索引的值 int midIndex=(leftIndex + rightIndex) / 2; //判斷將要插入的資料元素與已經排序的元素序列的中間值進行比較 if(temp > a[midIndex]){ //若要插入的新元素較大,更新左索引 leftIndex = midIndex + 1; } //若要插入的新元素較小,更新右索引 else{ rightIndex = midIndex - 1; } //輸出每次的midIndex值 System.out.println("minIndex值為:"+ midIndex ); } //用j來做已經排序後的資料序列中的最後一個數據元素的索引 for(int j = i-1; j >= leftIndex;j--){ //進行移位操作 a[j+1] = a[j]; } //插入資料元素 a[leftIndex] = temp; } //遍歷並輸出陣列 for(int v : a){ System.out.print(v+","); } }
}