详解快速排序 -秒懂

详解快速排序 -秒懂

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

精简博客内容,尽量已专业术语来分享。
努力做到对每一位认可自己的读者负责。
帮助别人的同时更是丰富自己的良机。

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

快速排序算法通过多次比较和交换来实现排序,其排序流程如下:
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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章