Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9649
  • 博文数量: 1
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 30
  • 用 户 组: 普通用户
  • 注册时间: 2013-04-29 20:55
文章分类
文章存档

2013年(1)

我的朋友

分类: Java

2013-07-24 14:58:05

纠结俩月之后,决定不考研,本月开始实习,由于项目还在调研阶段,上周老大让我去学多线程编程,截止到今天感觉效果一般般,用多线程实现了快速排序的算法,欢迎拍砖。

快速排序算法实现文件QuickSort.java

点击(此处)折叠或打开

  1. package quick.sort;

  2. import java.util.concurrent.Callable;
  3. import java.util.concurrent.locks.Lock;
  4. import java.util.concurrent.locks.ReentrantLock;

  5. public class QuickSort implements Callable<Point>{

  6.     private int[] array;
  7.     private final int start;
  8.     private final int end;
  9.     private int middle;
  10.     
  11.     Lock lock = new ReentrantLock();
  12.     public QuickSort(int start,int end,int[] array){
  13.         this.start = start;
  14.         this.end = end;
  15.         this.array = array;
  16.     }
  17.     @Override
  18.     public Point call() {
  19.         /*进行排序*/
  20.         quickSort();
  21.         return new Point(start,end,middle);
  22.     }
  23.     
  24.     public void quickSort(){
  25.         int head,tail;
  26.         
  27.         head = start;
  28.         tail = end + 1;
  29.         while(true){
  30.             
  31.             /*找到一个比head大的*/
  32.             do{
  33.                 head++;
  34.             }while(!(array[head] >= array[start] || head == end));
  35.             
  36.             /*找到一个比head小的*/
  37.             do{
  38.                 tail--;
  39.             }while(!(array[start] >= array[tail] || tail == start));
  40.             
  41.             if(head < tail)
  42.                 swap(head,tail);
  43.             else
  44.                 break;
  45.         }
  46.         swap(start,tail);
  47.         middle = tail;
  48.         
  49.     }
  50.     
  51.     public void swap(int a,int b){
  52.         int temp = 0;
  53.         temp = array[a];
  54.         array[a] = array[b];
  55.         array[b] = temp;
  56.     }

  57. }

  58. class Point{
  59.     private int start;
  60.     private int end;
  61.     private int middle;
  62.     
  63.     public Point(int start,int end,int middle){
  64.         this.start = start;
  65.         this.end = end;
  66.         this.middle = middle;
  67.     }
  68.     
  69.     public int getStart(){
  70.         return start;
  71.     }
  72.     
  73.     public int getEnd(){
  74.         return end;
  75.     }
  76.     
  77.     public int getMiddle(){
  78.         return middle;
  79.     }
  80.     
  81.     public boolean compareStartMiddle(){
  82.         return start < middle - 1;
  83.     }
  84.     
  85.     public boolean compareMiddleEnd(){
  86.         return middle + 1 < end;
  87.     }
  88.     
  89. }
创建线程文件:ThreadExecutor.java


点击(此处)折叠或打开

  1. package quick.sort;

  2. import java.util.concurrent.ExecutionException;
  3. import java.util.concurrent.ExecutorService;
  4. import java.util.concurrent.Executors;
  5. import java.util.concurrent.Future;

  6. public class ThreadExecutor {
  7.     public static ExecutorService exec = Executors.newCachedThreadPool();
  8.     
  9.     private int[] array;
  10.     
  11.     public ThreadExecutor(int[] array){
  12.         this.array = array;
  13.         createThread(0,array.length - 1);
  14.     }
  15.     
  16.     public void createThread(int start,int end){
  17.         Future<Point> future = exec.submit((new QuickSort(start,end,array)));
  18.         try {
  19.             System.out.println(future.get().getMiddle());
  20.             if(future.get().compareStartMiddle())
  21.                 createThread(future.get().getStart(),future.get().getMiddle() - 1);
  22.             if(future.get().compareMiddleEnd())
  23.                 createThread(future.get().getMiddle() + 1,future.get().getEnd());
  24.         } catch (InterruptedException e) {
  25.             // TODO Auto-generated catch block
  26.             e.printStackTrace();
  27.         } catch (ExecutionException e) {
  28.             // TODO Auto-generated catch block
  29.             e.printStackTrace();
  30.         }
  31.         
  32.     }
  33.     
  34.     public void print(){
  35.         for(int g : array)
  36.             System.out.print(g + " ");
  37.     }
  38.     public static void main(String[] args){
  39.         int[] array = {10,9,8,7,5,6,4,3,2,1};
  40.         
  41.         ThreadExecutor tx = new ThreadExecutor(array);
  42.         tx.print();
  43.     }
  44. }


阅读(3436) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:没有了

给主人留下些什么吧!~~