快速排序是对冒泡排序的一种改进,其排序速度相对较快,排序的基本思想是:通过 一趟排序将要排序的数据分割成独立的两个部分,其中一部分数据要比另外一部分所有数据要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以用递归实现,以此使整个数据变成有序序列。一趟快速排序的算法是:
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) 代码:
public void quickSort(int sortarray[].int lowIndex,int highIndex){
int lo = lowIndex; //记录最小索引
int hi = highIndex; //记录最大索引
if(highIndex > lowIndex){ //记录分界点元素
mid = sortarray[(lowIndex + highIndex)/2]; 确定中间分界点元素值
while (lo <= hi){
while ((lo < highIndex) && sortarray[lo] < mid)
++lo ;
while((hi > lowIndex) && (sortarray[hi] > mid))
--hi ;
if(lo <= hi){
swap(sortarray,lo,hi);
++lo;
--hi;
}
}
if(lowIndex < hi) //递归排序没有未分解元素
quickSort(sortarray,lowIndex,hi);
if(lo < highIndex) //递归排序没有未分解元素
quickSort(sortarray,lo,highIndex);
}
}
private void swap(int swapArray[],int i,int j){ //交换数组元素
int temp = swapArray[i];
swapArray[i] = swapArray[j];
swapArray[j] = temp;
for(int k = 0;k<array.length ; k++){
textArea2.append(array[k]+" ");
}
textArea.append("\n");
}
各种排序方式的比较 请见博客: http://blog.csdn.net/weasleyqi/article/details/7768055