並行希爾排序(java)

2021-08-15 22:52:48 字數 2670 閱讀 5041

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 希爾排序

希爾排序也成為 縮小增量排序 其基本原理是,現將待排序的陣列元素分成多個子串行,使得每個子串行的元素個數相對較少,然後對各個子串行分別進行直接插入排序,待整個待排序列 基本有序 後,最後在對所有元素進行一次直接插入排序。因此,我們要採用跳躍分割的策略 將相距某個 增量 的記錄組成乙個子串行,這樣才能...