麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Java > 正文

多線程加速快排(java)

2019-11-06 06:11:44
字體:
來源:轉載
供稿:網友

1.快排的過程: a)設置兩個變量,分別指向數組的首尾,選擇一個標志元素(一般是第一個元素) b)從后向前找比標志元素小的值,從前向后找比標志元素大的值,將小的移到低端,將大的移到高端,更新標志元素的位置。 c)只要首尾兩個指針不相遇,就循環進行 這樣一次循環的結果是標志元素左邊的都比它小,右邊的都比它大 d)將被標志元素分開的兩個數組再遞歸(a,b,c) 2.快排代碼

class quicksort{ public void sort(int left,int right,int str[]) { int i,j,pos; if(left>=right) { return; } i=left; j=right; pos=str[i]; while(i<j) { while(i<j && pos<=str[j]) { j--; } if(i<j) { str[i]=str[j]; } while(i<j && pos>=str[i]) { i++; } if(i<j) { str[j] = str[i]; } str[i]=pos; sort(left,i-1,str); sort(i+1,right,str); } }}

3.多線程加速快排 a,b,c三步可以看成是一個小任務,將整個任務分成若干個小任務,分而治之。因為每個小任務之間有聯系,不能跟求值的多線程一樣,只要有個共享數據,將值相加。這里用Callable 接口(Callable 接口類似于 Runnable),該接口可以帶返回值。

1)返回值的結構為

class temp{ PRivate int left=0; private int right=0; private int middle=0; public temp(int left, int right, int middle) { this.left = left; this.right = right; this.middle = middle; } public int getLeft() { return left; } public int getRight() { return right; } public int getMiddle() { return middle; } public boolean cmpLeftMiddle() { return left<middle-1; } public boolean cmpMiddleRight() { return middle+1<right; }}

2)實現Callable 接口

class myThread implements Callable<temp>{ private int left; private int right; private int middle; private int str[]; public myThread(int left, int right, int str[]) { this.left=left; this.right=right; this.str=str; } public temp call() { onesort(); return new temp(left,right,middle); } public void onesort() { int i,j,pos; if(left>=right) { return; } i=left; j=right; pos=str[i]; while(i<j) { while(i<j && pos<=str[j]) { j--; } if(i<j) { str[i]=str[j]; } while(i<j && pos>=str[i]) { i++; } if(i<j) { str[j] = str[i]; } str[i]=pos; } middle = i; }}

4.普通快排與多線程加速快排的對比 測試類:

public class Qsort { //創建線程池 ExecutorService pool = Executors.newFixedThreadPool(6); private int[] str=null; public Qsort(int str[]) { this.str = str; sort(0,str.length-1); } //分治 public void sort(int begin, int end) { //Future用來接收返回值 Future<temp> future = pool.submit(new myThread(begin, end, str)); try { if(future.get().cmpLeftMiddle()) { sort(future.get().getLeft(),future.get().getMiddle()-1); } if(future.get().cmpMiddleRight()) { sort(future.get().getMiddle()+1,future.get().getRight()); } } catch (InterruptedException e) { // TODO 自動生成的 catch 塊 e.printStackTrace(); } catch (ExecutionException e) { // TODO 自動生成的 catch 塊 e.printStackTrace(); } } public static void main(String[] args) { int a[] = new int[1024]; for(int i=0;i<1024; i++) { a[i] = (int)(Math.random()*100); System.out.print(a[i]+" "); } System.out.println(); long star = System.currentTimeMillis(); new Qsort(a); // new quicksort().sort(0, a.length-1, a); long end = System.currentTimeMillis(); for(int i=0; i<a.length; i++) { System.out.print(a[i] + " "); } System.out.println(); System.out.println(end-star); }}

1)未加速的快排 這里寫圖片描述

2)加速的快排 這里寫圖片描述


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 亚洲一区久久久 | 国产无遮挡一区二区三区毛片日本 | 免费看成人av | 精品一区二区三区免费看 | 五月婷婷第四色 | 国产91一区 | www.91成人 | 少妇一级淫片免费放播放 | 国产午夜精品视频免费不卡69堂 | 久久97超碰 | 国产一级一片免费播放 | 一区二区三区在线观看国产 | 久久精品一二三区 | 久久精品99国产国产精 | 久久久国产一级片 | 久久综合给合久久狠狠狠97色69 | 毛片视频大全 | 欧美综合日韩 | 羞羞视频免费网站日本动漫 | 欧美精品国产综合久久 | 亚洲3p激情在线观看 | 欧美3p激情一区二区三区猛视频 | 18pao国产成人免费视频 | 国产色视频免费 | 免费黄色在线电影 | 亚洲天堂岛国片 | 久久蜜臀一区二区三区av | 一本色道久久综合亚洲精品图片 | 国产精品久久久久久影视 | 国产欧美日韩在线不卡第一页 | 欧美成人精品一区 | 欧美精品成人一区二区三区四区 | 国产精品视频二区不卡 | 337p粉嫩大胆噜噜噜亚瑟影院 | 91福利社在线 | 久久在草| 曰批全过程40分钟免费视频多人 | 九九热在线视频免费观看 | 久久99综合久久爱伊人 | 久久精品一区二区三区国产主播 | 美国一级免费视频 |