public class shellsort
// system.out.println("i:"+i);
/*** 序列版(測試用)
shell s = new shell(i, interval, arr);
s.shell(i,interval); }
* *//**
* * 並行版
*/// 阻塞
list> ress = exec.invokeall(tasks);
system.out.println("uncompletedresult:" + arrays.tostring(arr));
/** for(futureres:ress)
*/interval -= 1;
exec.shutdownnow();
exec = null;
}//內部類
private static class shell implements callable
*/public shell(int start, int interval, int arr, atomicinteger counter)
@override
public void call() throws exception catch (exception e)
return null;}/*
* 執行緒不安全, 應該將 所有執行緒取資料(以 start為起點 interval為間隔) 和 在 排序分開 即 全部執行緒取完資料後,
* 再分別進行排序
* * 這裡採用 將放操作 放在 取操作後執行
* * private final void shell(int start, int interval)
* * } catch (exception e)
* * }
*/private final void shell(int start, int interval)
counter.decrementandget();
while (counter.get() != 0) {} // 等待 所有執行緒取完資料
system.out.println("list:" + templist);
for (int i = start; i < arr.length; i += interval)
} catch (exception e)
}private final void adjust(linkedlistlist, int num)
list.add(index, num);
// system.out.println(list);
} else }}
}/**
* 測試1:
* arr:[24, 22, 72, 65, 35, 69, 91, 84, 34, 7, 20, 85, 25, 26, 58, 49, 87, 59, 29, 46, 73, 66, 82, 44, 13]
result:[7, 13, 20, 22, 24, 25, 26, 29, 34, 35, 44, 46, 49, 58, 59, 65, 66, 69, 72, 73, 82, 84, 85, 87, 91]
*
* 測試2:
* arr:[82, 39, 41, 2, 64, 77, 63, 90, 55, 0, 21, 98, 48, 92, 88, 66, 26, 84, 68, 8, 59, 44, 17, 56, 31]
* result:[0, 2, 8, 17, 21, 26, 31, 39, 41, 44, 48, 55, 56, 59, 63, 64, 66, 68, 77, 82, 84, 88, 90, 92, 98]
* 測試3:
* arr:[89, 13, 6, 73, 55, 31, 53, 99, 15, 51, 86, 18, 79, 37, 92, 68, 93, 10, 77, 40, 98, 41, 26, 47, 33]
* result:[6, 10, 13, 15, 18, 26, 31, 33, 37, 40, 41, 47, 51, 53, 55, 68, 73, 77, 79, 86, 89, 92, 93, 98, 99]
* 測試4:
* arr:[53, 27, 85, 88, 11, 50, 4, 59, 10, 29, 43, 81, 75, 52, 35, 78, 20, 57, 24, 5, 25, 68, 8, 89, 72]
* result:[4, 5, 8, 10, 11, 20, 24, 25, 27, 29, 35, 43, 50, 52, 53, 57, 59, 68, 72, 75, 78, 81, 85, 88, 89]
*
* 測試5:
* arr:[36, 61, 60, 34, 18, 54, 4, 30, 74, 11, 75, 53, 91, 29, 69, 20, 25, 86, 5, 0, 39, 38, 44, 35, 17]
result:[0, 4, 5, 11, 17, 18, 20, 25, 29, 30, 34, 35, 36, 38, 39, 44, 53, 54, 60, 61, 69, 74, 75, 86, 91]
*/
Java 希爾排序
希爾排序示意圖 希爾排序,說實話有點難,不過還是弄出來了,package com.vgbh public class shellsorting 希爾排序 將無序陣列分割為若干個子串行,子串行不是逐段分割的,而是相隔特定的增量的子串行,對各個子串行進行插入排序 然後再選擇乙個更小的增量,再將陣列分割為...
希爾排序 Java
原理 對於n個待排序的數列,取乙個小於n的整數gap gap被稱為步長 將待排序元素分成若干個組子串行,所有距離為gap的倍數的記錄放在同乙個組中 然後,對各組內的元素進行直接插入排序。這一趟排序完成之後,每乙個組的元素都是有序的。然後減小gap的值,並重複執行上述的分組和排序。重複這樣的操作,當g...
java 希爾排序
希爾排序也成為 縮小增量排序 其基本原理是,現將待排序的陣列元素分成多個子串行,使得每個子串行的元素個數相對較少,然後對各個子串行分別進行直接插入排序,待整個待排序列 基本有序 後,最後在對所有元素進行一次直接插入排序。因此,我們要採用跳躍分割的策略 將相距某個 增量 的記錄組成乙個子串行,這樣才能...