快速排序

本文详细介绍了快速排序的基本思想及其在Java中的实现过程,包括一趟快速排序、分割子表及递归调用,最终将无序数组转化为有序数组。

快速排序的基本思想:

从待排序的的记录序列中,选取一个记录(通常选取的是第一个记录),其关键字是k1,然后将其余关键字小于k1的记录移到后面,而将关键字大于k1的移到前面,结构将待排序记录序列分成两个字表,最后将关键字为k1的记录插到其分界线的位置处。我们将这个过程称作一趟快速排序。然后对分割的子表,继续按上述原则进行分割,直到所有的子表的表长不超过1为止,此时待排序的记录序列就变成了一个有序表。

 

java代码:

package com.test.sort;

public class QKSort {

	public static void main(String[] args) {
		int[] array = {12, 54, 80, 98, 62, 11, 73, 26, 42, 27};
		
		QKSort(array,0,array.length-1);
		
		for (int i = 0; i < array.length; i++) {
			System.out.print(array[i] + " ");
		}
		System.out.println();

	}
	
	public static void QKSort(int[] array, int left, int rigth) {
		if(left>=rigth) {
			return;
		} else {
			int pos = QKPass(array,left,rigth);
			QKSort(array, left, pos-1);
			QKSort(array, pos+1, rigth);
		}
		
	}
	
	public static int QKPass(int[] array, int left, int rigth) {  //一趟快速排序
		int key = array[left];      //保存基准记录
		int low = left;
		int high = rigth;
		while (low < high) {
			while(low < high) {          //从右向左找比key小的值
				if(array[high]<key) {     
					array[low] = array[high];  //找到并进行交换
					low ++ ;
					break;
				} else {
					high -- ;
				}
			}
			
			while(low < high) {       //从左向右找比key大的值
				if(array[low] > key) {
					array[high] = array[low];   // 找到进行交换
					high -- ;
					break;
				} else {
					low ++ ;
				}
			}	
		}
		array[low] = key;       //将基准结点记录保存到low==high的位置
		return low;             //返回基准记录的位置
	}
	
}


 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值