详解快速排序

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_39443053/article/details/101313598

详解快速排序

          点关注不迷路,欢迎再访!

快速排序算法和冒泡排序算法类似,都是基于交换排序思想的。快速排序算法对冒泡排序算法进行了改进,从而具有更高的执行效率。

快速排序算法通过多次比较和交换来实现排序,其排序流程如下:
1.首先设定一个分界值,通过该分界值将数组分成左右两部分。
2.将大于等于分界值的数据集中到数组的右边,小于分界值的数据集中到数组的左边。此时,左边部分中各元素都小于等于分界值,而右边部分中各元素都大于等于分界值。
3.然后,左边和右边的数据可以独立排序。对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样将左边放置较小值,右边放置较大值。右侧的数组数据也可以做类似处理。
4.重复上述过程,可以看出这是一个递归定义。通过递归将左侧部分排好序后,再递归排好右侧部分的顺序。当左、右两部分各数据排序完成后,整个数组的排序也就完成了。

	public static void main(String[] args) {
		int [] arr = {69,62,89,37,97,17,28,49};
		quickSort(arr,0,arr.length-1);
		System.out.print("排序后的数组结果:\n");    //输出每步排序的结果
		
		for (int h = 0; h < arr.length; h++) {
			System.out.print(arr[h]+" ");
		}
		System.out.print("\n");
	}
	
	
	public static  void quickSort(int [] arr,int left,int right) {
		int f,t;
		int rtemp,ltemp;
		ltemp = left;
		rtemp = right;
		f = arr[(left + right)/2];    //分界值
		while(ltemp < rtemp) {
			while(arr[ltemp] < f) {
				++ltemp;
			}
			while(arr[rtemp] > f) {
				--rtemp;
			}
			if(ltemp <= rtemp) {
				t = arr[ltemp];
				arr[ltemp] = arr[rtemp];
				arr[rtemp] = t;
				--rtemp;
				++ltemp;
			}
		}
		
		if(ltemp == rtemp) {
			ltemp++;
		}
		if(left < rtemp) {
			quickSort(arr,left,ltemp-1);    //递归调用
		}
		if(ltemp < right) {
			quickSort(arr,rtemp+1,right);    //递归调用
		}
	}

排序后的数组结果:
17 28 37 49 62 69 89 97

猜你喜欢

转载自blog.csdn.net/qq_39443053/article/details/101313598