Java实现快速排序

快 速排序是对冒泡排序的一种改进,其排序速度相对较快,排序的基本思想是:通过 一趟排序将要排序的数据分割成独立的两个部分,其中一部分数据要比另外一部分所有数据要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程 可以用递归实现,以此使整个数据变成有序序列。一趟快速排序的算法是:
1、设置两个变量i,j排序开始的时候i=0;j=n-1;
2、以第一个数组元素作为关键数据,赋值给key,即 key=A[0];
3、从J开始向前搜索,即由后开始向前搜索(j=j-1即j--),找到第一个小于key的值A[j],A[j]与A[i]交换;
4、从I开始向后搜索,即由前开始向后搜索(i=i+1即i++),找到第一个大于key的A[i],A[i]与A[j]交换;
5、重复第3、4、5步,直到 i=j; (3,4步是在程序中没找到时候j=j-1,i=i+1,直至找到为止。找到并交换的时候i, j指针位置不变。另外当i=j这过程一定正好是i+或j-完成的最后令循环结束。)
排序过程如图所示:

 


代码实现:

(1) 生成一个随机数组:见博客:http://blog.csdn.net/weasleyqi/article/details/7768055
(2) 代码:

[java]
  1. public void quickSort(int sortarray[].int lowIndex,int highIndex){  
  2.     int lo = lowIndex;    //记录最小索引  
  3.     int hi = highIndex;   //记录最大索引  
  4.     if(highIndex > lowIndex){    //记录分界点元素  
  5.         mid = sortarray[(lowIndex + highIndex)/2];    确定中间分界点元素值  
  6.         while (lo <= hi){  
  7.             while ((lo < highIndex) && sortarray[lo] < mid)  
  8.                 ++lo ;  
  9.             while((hi > lowIndex) && (sortarray[hi] > mid))  
  10.                 --hi ;  
  11.             if(lo <= hi){  
  12.                 swap(sortarray,lo,hi);  
  13.                 ++lo;  
  14.                 --hi;  
  15.             }  
  16.         }  
  17.         if(lowIndex < hi)     //递归排序没有未分解元素  
  18.             quickSort(sortarray,lowIndex,hi);  
  19.         if(lo < highIndex)    //递归排序没有未分解元素  
  20.             quickSort(sortarray,lo,highIndex);  
  21.     }  
  22. }  
  23. private void swap(int swapArray[],int i,int j){   //交换数组元素  
  24.     int temp = swapArray[i];  
  25.     swapArray[i] = swapArray[j];  
  26.     swapArray[j] = temp;  
  27.     for(int k = 0;k<array.length ; k++){  
  28.         textArea2.append(array[k]+"  ");  
  29.     }  
  30.     textArea.append("\n");  
  31. }  


posted @ 2012-11-06 16:42  szgzwc  阅读(181)  评论(0编辑  收藏  举报