数据结构之排序算法Java实现—— 交换类排序之快速排序算法

Posted Emma_Zhang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构之排序算法Java实现—— 交换类排序之快速排序算法相关的知识,希望对你有一定的参考价值。

快速排序算法属于"交换类"的排序,它的效率主要跟数据分布是否对称有关。

升序排序:

/**
	 * 快速排序
	 * 升序排序
	 */
	@Override
	public <T extends Comparable<? super T>> void sortByAsc(T[] data) {
		if(data == null || data.length <= 1){
			return;
		}
		partitionSortByAsc(data, 0, data.length - 1);
	}

	private <T extends Comparable<? super T>> void partitionSortByAsc(T[] data, int low, int high) {
		if(low >= high){
			return;
		}
		/**使用两个指针 start 和 end*/
		int start = low;
		int end = high;
		T key = data[low];
		/**找到key的位置,然后将data分成两部分,分别再次进行递归*/
		while(start < end){
			while(start < end && data[start].compareTo(key) < 0){
				start ++ ;
			}
			if(data[start].compareTo(key) > 0){
				T temp = data[start];
				data[start] = data[end];
				data[end] = temp;
			}
			while(start < end && data[end].compareTo(key) > 0){
				end -- ;
			}
			if(data[end].compareTo(key) <= 0){
				T temp = data[end];
				data[end] = data[start];
				data[start] = temp;
			}
		}
		/**左边的*/
		if(start > low) partitionSortByAsc(data,low,start - 1);
		/**右边的*/
		if(end < high) partitionSortByAsc(data,end + 1, high);
		
		
	}

  降序排序:

/**
	 * 快速排序
	 * 降序排序
	 */

	@Override
	public <T extends Comparable<? super T>> void sortByDesc(T[] data) {
		partitionSortByDesc(data, 0, data.length - 1);
		
	}

	private <T extends Comparable<? super T>> void partitionSortByDesc(T[] data, int low, int high) {
		if(low >= high){
			return;
		}
		/**使用两个指针 start 和 end*/
		int start = low;
		int end = high;
		T key = data[low];
		/**找到key的位置,然后将data分成两部分,分别再次进行递归*/
		while(start < end){
			while(start < end && data[start].compareTo(key) > 0){
				start ++ ;
			}
			if(data[start].compareTo(key) <= 0){
				T temp = data[start];
				data[start] = data[end];
				data[end] = temp;
			}
			while(start < end && data[end].compareTo(key) < 0){
				end -- ;
			}
			if(data[end].compareTo(key) > 0){
				T temp = data[end];
				data[end] = data[start];
				data[start] = temp;
			}
		}
		/**左边的*/
		if(start > low) partitionSortByDesc(data,low,start - 1);
		/**右边的*/
		if(end < high) partitionSortByDesc(data,end + 1, high);
		
	}

  

 

以上是关于数据结构之排序算法Java实现—— 交换类排序之快速排序算法的主要内容,如果未能解决你的问题,请参考以下文章

常用算法Java实现之快速排序

排序系列 之 简单选择排序及其改进算法 —— Java实现

算法是程序的灵魂之快希归

算法是程序的灵魂之快希归

数据结构之排序算法Java实现—— 冒泡排序算法

数据结构之排序算法Java实现—— 插入类排序之折半插入排序算法