希爾排序交換法:分組+冒泡排序組合
一、測驗類SortTest
import java.util.Arrays;
public class SortTest {
private static final int L = 20;
public static void main(String[] args) {
int [] arr = new int[6];
for (int i = 0; i < arr.length; i++) {
arr[i] = (int)((Math.random()+1)*L);
}
System.out.println(Arrays.toString(arr));
// new Sort().BubbleSort(arr);
// new Sort().SelectionSort(arr);
// new Sort().InsertSort(arr);
new Sort().ShellSort1(arr);
System.out.println(Arrays.toString(arr));
}
}
二、排序類Sort
/**
*
* <h1>希爾排序-交換法</h1>
* <ul>
* <li> 希爾排序交換法,先分組,然后組內進行冒泡排序
* </ul>
* @param arr the array
* @author linzm
* @since 1.8
*
*/
public void ShellSort1(int[] arr) {
int sep = arr.length/2;
while(sep >= 1) {
/*
* 假設length=8,第一次分組8/2 = 4 組
* 4組組內兩兩比較
* 第二次分組,4/2 = 2組 假設第一組為 3 8 0 -1 2組內冒泡排序得到一個組內有序的陣列
* 第二次分組的第一組{3, 8, 0, -1, 2}下標分別為0, 2, 4, 6
* first:3 8 0 -1 2
* second:0 3 8 -1 2(冒泡程序)0先和8交換然后和3交換
* third:-1 0 3 8 2(冒泡程序)
* fourth:-1 0 2 3 8(冒泡程序)
* 第三次分組,2/2 = 1組 整體進行一趟冒泡
*
*/
for (int i = sep; i < arr.length; i++) {
for (int j = i-sep; j >= 0; j -= sep) {
int temp;
if(arr[j] > arr[j+sep]) {
temp = arr[j+sep];
arr[j+sep] = arr[j];
arr[j] = temp;
}
}
}
sep /= 2;
}
}
僅供參考,有錯誤還請指出!
有什么想法,評論區留言,互相指教指教,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/252441.html
標籤:Java
上一篇:RPC 實戰與原理 精簡版
下一篇:Java學習-JDBC
