现在的位置: 首页 > 综合 > 正文

Java实现快速排序

2018年04月22日 ⁄ 综合 ⁄ 共 1248字 ⁄ 字号 评论关闭

快速排序是对冒泡排序的一种改进,其排序速度相对较快,排序的基本思想是:通过 一趟排序将要排序的数据分割成独立的两个部分,其中一部分数据要比另外一部分所有数据要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以用递归实现,以此使整个数据变成有序序列。一趟快速排序的算法是:
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

抱歉!评论已关闭.