2.1直接插入
原理:
2.1.1 直接插入排序
思路:由第二個元素開始,從前向後遍歷,如若當前元素比前乙個元素小,則將
當前元素設為哨兵元素,儲存當前元素,從當前位置向前掃瞄,尋找哨兵元素應該插入的位置,
前面的元素依次後移,找到直接插入。然後繼續上述過程
2.1.2
折半查詢
原理:
對有序數列進行查詢,分成兩塊,去掉待查詢數字不存在的另一塊,直到待查詢數字等於中間數字。
主方法:
public static void main(string args) ;
insert(array);//插入排序
int num=search(array,32,0,8);//折半查詢
system.out.println();
system.out.println("num的下標為:"+num);
}
直接插入排序方法**:
//進行直接插入排序
public static void insert(int array)
//這裡for迴圈結束會有乙個pos--操作使 pos=-1,要先執行++pos使之成為0;
array[++pos]=temp;
}for (int i:array)
}
折半查詢方法**:
/**
* 在已經排序的陣列中查詢num的位置
* @param array 已經排序的陣列
* @param num 待查詢的資料
* @return 查詢資料在陣列所在的索引,如果查詢的資料不存在,返回-1
* @left 陣列的左邊界
* @right 陣列的右邊界
*/public static int search(int array,int num,int left,int right)else
}
執行結果:
1 2 32 32 45 54 55 78 96
num的下標為:2
process finished with exit code 0
2.2 希爾排序
原理:
簡單插入排序很循規蹈矩,不管陣列分布是怎麼樣的,依然一步一步的對元素進行比較,移動,插入,比如[5,4,3,2,1,0]這種倒序序列,陣列末端的0要回到首位置很是費勁,比較和移動元素均需n-1次。而希爾排序在陣列中採用跳躍式分組的策略,通過某個增量將陣列元素劃分為若干組,然後分組進行插入排序,隨後逐步縮小增量,繼續按組進行插入排序操作,直至增量為1。希爾排序通過這種策略使得整個陣列在初始階段達到從巨集觀上看基本有序,小的基本在前,大的基本在後。然後縮小增量,到增量為1時,其實多數情況下只需微調即可,不會涉及過多的資料移動。
希爾排序**:
public static void main(string args);
sort(arr);
system.out.println(arrays.tostring(arr));
}
/**
* 希爾排序 針對有序序列在插入時採用移動法。
* @param arr
*/public static void sort1(int arr)
arr[j] = temp;}}
}}
資料結構之插入排序(java)
演算法描述 直接插入排序 straight insertion sort 的基本思想是 把n個待排序的元素看成為乙個有序表和乙個無序表。開始時有序表中只包含1個元素,無序表中包含有n 1個元素,排序過程中每次從無序表中取出第乙個元素,將它插入到有序表中的適當位置,使之成為新的有序表,重複n 1次可完...
資料結構 插入排序
演算法中經常會用到各種各樣的演算法,比較簡答的思想就是氣泡排序,一般剛開始程式設計時遇到排序問題時,會很容易想到冒泡排,氣泡排序是通過兩輛比較數值,從而將數字移動到開始或者末尾的位置,反覆重複這個過程從而就達到了排序的目的。其時間複雜度大概是 n2 還有一種比較常用的插入排序,其思想與氣泡排序比較類...
資料結構 插入排序
一 直接插入排序 1 直接插入排序的演算法思想 r i 的鍵值ki與r 0 r i 1 的鍵值依次比較 從後往前比 找到r i 應插入的位置,並把從該位置開始的記錄後移乙個位置,把r i 插入到找到的插入位置,完成一趟直接排序 重複選r i 1 r n 完成上述操作,直到排序完畢 注 為什麼要從後往...