希尔排序--Java
生活随笔
收集整理的這篇文章主要介紹了
希尔排序--Java
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
希爾排序
排序原理:
1、選定一個(gè)增量h,按照增長(zhǎng)量h作為數(shù)據(jù)分組的依據(jù),對(duì)數(shù)據(jù)進(jìn)行分組
2、對(duì)分好組的每一組數(shù)據(jù)完成插入排序
3、減小增長(zhǎng)量,最小減為1,重復(fù)第二步操作
其中,希爾排序確定增長(zhǎng)量h的規(guī)則:
int h = 1; while(h<數(shù)組長(zhǎng)度/2){h = 2h+1; } //循環(huán)結(jié)束后我們可以確定h的最大值; h的減小規(guī)則為: h = h/2;代碼實(shí)現(xiàn):
package demo02.sort;public class Shell {/*** 對(duì)數(shù)組a中的元素進(jìn)行排序*/public static void sort(Comparable[] a){//1.根據(jù)數(shù)組a的長(zhǎng)度,確定增長(zhǎng)量h的初始值int h = 1;while(h<a.length/2){h = 2*h+1;}//2、希爾排序while(h>=1){//排序//2.1找到待插入的元素for (int i = h; i < a.length; i++) {//2.2把待插入的元素插入到有序數(shù)組中for (int j = i; j >=h; j-=h) {//待插入的元素是a[j],比較a[j]和a[j-h]if (greater(a[j-h],a[j])){exch(a,j-h,j);}else {break;}}}//減小h的值h = h/2;}}/*** 比較v元素是否大于w元素*/private static boolean greater(Comparable v,Comparable w){return v.compareTo(w)>0;}/*** 數(shù)組元素i和j交換位置*/private static void exch(Comparable[] a,int i,int j){Comparable temp;temp = a[i];a[i] = a[j];a[j] = temp;} } package demo02.test; import demo02.sort.Shell; import java.util.Arrays; public class TestShell {public static void main(String[] args) {Integer[] a = {9,1,2,5,7,4,8,6,3,5};Shell.sort(a);System.out.println(Arrays.toString(a));} }運(yùn)行結(jié)果:
總結(jié)
以上是生活随笔為你收集整理的希尔排序--Java的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 椭圆极点极线性质_又见阿氏圆——适合作椭
- 下一篇: 套口机跳针修理带图_套口机维修注意事项