Chinaunix首页 | 论坛 | 博客
  • 博客访问: 303026
  • 博文数量: 42
  • 博客积分: 365
  • 博客等级: 一等列兵
  • 技术积分: 528
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-12 20:59
文章分类

全部博文(42)

文章存档

2016年(1)

2015年(2)

2014年(15)

2013年(10)

2012年(14)

我的朋友

分类: Java

2012-07-16 14:53:50


点击(此处)折叠或打开

  1. /*
  2.  * 快速排序是最流行的排序算法,本质上通过把一个数组划分为两个子数组,
  3.  * 然后递归地调用自身为每一个子数组进行快速排序来实现。
  4.  * ArrayIns.java
  5.  * linzhanghui@gmail.com
  6.  */

  7. package linzhanghui.quicksort;

  8. public class ArrayIns {
  9.     private long[] theArray;
  10.     private int nElems;
  11.     
  12.     public ArrayIns(int max) {
  13.         theArray = new long[max];
  14.         nElems = 0;
  15.     }
  16.     
  17.     public void insert(long value) {
  18.         theArray[nElems] = value;
  19.         nElems++;
  20.     }
  21.     
  22.     public void display() {
  23.         System.out.print("A=");
  24.         for(int j=0; j<nElems; j++)
  25.             System.out.print(theArray[j] + " ");
  26.         System.out.println("");
  27.     }
  28.     
  29.     public void quickSort() {
  30.         recQuickSort(0, nElems-1);
  31.     }
  32.     
  33.     public void recQuickSort(int left, int right) {
  34.         if(right-left <= 0)
  35.             return;
  36.         else {
  37.             long pivot = theArray[right];
  38.             
  39.             int partition = partitionIt(left, right, pivot);
  40.             recQuickSort(left, partition-1);
  41.             recQuickSort(partition+1, right);
  42.         }
  43.     }
  44.     
  45.     public int partitionIt(int left, int right, long pivot) {
  46.         int leftPtr = left-1;
  47.         int rightPtr = right;
  48.         while(true) {
  49.             while( theArray[++leftPtr] < pivot)
  50.                 ;
  51.             while(rightPtr > 0 && theArray[--rightPtr] > pivot)
  52.                 ;
  53.             
  54.             if(leftPtr >= rightPtr)
  55.                 break;
  56.             else
  57.                 swap(leftPtr, rightPtr);
  58.         }
  59.         swap(leftPtr, right);
  60.         return leftPtr;
  61.     }
  62.     
  63.     public void swap(int dex1, int dex2) {
  64.         long temp = theArray[dex1];
  65.         theArray[dex1] = theArray[dex2];
  66.         theArray[dex2] = temp;
  67.     }    
  68. }



点击(此处)折叠或打开

  1. /*
  2.  * 程序随机产生16个2位随机数,显示这16个随机数后,对其进行快速排序并输出。
  3.  * linzhanghui@gmail.com
  4.  */
  5. package linzhanghui.quicksort;

  6. public class QuickSortApp {
  7.     public static void main(String[] args) {
  8.         int maxSize = 16;
  9.         ArrayIns arr;
  10.         arr = new ArrayIns(maxSize);
  11.         
  12.         for(int j=0; j<maxSize; j++) {
  13.             long n = (int)(java.lang.Math.random()*99);
  14.             arr.insert(n);
  15.         }
  16.         
  17.         arr.display();
  18.         arr.quickSort();
  19.         arr.display();
  20.     }
  21. }

阅读(1012) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~