关于快速排序算法的问题

public class QuickSort {
    public int[] quickSort(int[] A, int n) {
        
       quickSort(A,0,n-1);
        return A;
    }
    
private  void quickSort(int[] a, int leftPos, int rightPos) {
		
			if(1<rightPos-leftPos){
		
			int pivot = median3(a, leftPos, rightPos);
			
			int i = leftPos, j = rightPos - 1;
			
			for (;;) {
				while (a[++i] < pivot) {
				}
				

				while (a[--j] > pivot) {
				}
				

				if (i < j) {// 当i还没有超过j的时候
					exchangeElements(a, i, j);
				} else {
					break;
				}
			}
				// 将pivot与i指向的元素交换
				exchangeElements(a, i, rightPos - 1);

				quickSort(a, leftPos, i - 1);// 递归快速排序左侧序列
				quickSort(a, i + 1, rightPos);// 递归快速排序右侧序列
			
			}else{
                return;
            }

	}

	
	private  int median3(int[] a, int leftPos, int rightPos) {
		int center = (leftPos + rightPos) / 2;
		if (a[center] < a[leftPos]) {
			exchangeElements(a, center, leftPos);
		}
		if (a[rightPos] < a[leftPos]) {
			exchangeElements(a, rightPos, leftPos);
		}// 此时,最小值位于a[leftPos]
		if (a[rightPos] < a[center]) {
			exchangeElements(a, rightPos, center);
		}// 此时,最大值位于a[rightPos],中位数pivot位于a[center]
			// 将pivot放置于rightPos-1的位置.
			// ∵a[leftPos]一定小于pivot,a[rightPos]一定大于pivot
		exchangeElements(a, center, rightPos - 1);

		return a[rightPos - 1];
	}
   //位置互换 
    private  void exchangeElements(int[] array, int index1, int index2) {  
        int temp = array[index1];  
        array[index1] = array[index2];  
        array[index2] = temp;  
    }  
}

//上面是<<数据结构与算法 --Java语言描述>>中的快速排序算法,为什么我用上述算法在排序时,测试通过率为3.33%,百思不得其解,求各路大神解答
//在此,万分感谢!!!!!!!!!!

#Java工程师##算法工程师#
全部评论
你至少得把你做的题帖出来啊~
点赞 回复 分享
发布于 2016-12-21 22:07
你为什么不用一个排错的用例单步调试看看呢。
点赞 回复 分享
发布于 2016-12-22 19:47

相关推荐

像好涩一样好学:这公司我也拿过 基本明确周六加班 工资还凑活 另外下次镜头往上点儿
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务