java快速排序(非递归)

package link;

import java.net.PasswordAuthentication;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Stack;

public class quickSort2 {
	public static void quickSort(int[] arr,int startIndex,int endIndex) {
		//用一个集合栈来代替递归函数栈
		Stack<Map<String,Integer>> quickSortStack=new Stack<Map<String,Integer>>();
		//整个数列的起止下标,以哈希的形式入栈
		Map rootParam=new HashMap();
		rootParam.put("startIndex", startIndex);
		rootParam.put("endIndex", endIndex);
		quickSortStack.push(rootParam);
		//循环结束条件:栈为空
		while(!quickSortStack.isEmpty()) {
			//栈顶元素出栈,得到起止下标
			Map<String,Integer> param=quickSortStack.pop();
			//得到基准元素的位置
			int pivotIndex=partition(arr,param.get("startIndex"),param.get("endIndex"));
			//根据基准元素分成两个部分,把每一部分的起止下标入栈
			if(param.get("startIndex")<pivotIndex-1) {
				Map<String,Integer> leftParam=new HashMap<String,Integer>();
				leftParam.put("startIndex", param.get("startIndex"));
				leftParam.put("endIndex", pivotIndex-1);
				quickSortStack.push(leftParam);
			}
			if(pivotIndex+1<param.get("endIndex")) {
				Map<String, Integer> rightParam=new HashMap<String ,Integer>();
				rightParam.put("startIndex", pivotIndex+1);
				rightParam.put("endIndex", param.get("endIndex"));
				quickSortStack.push(rightParam);
			}
		}
		
	}
	
	private static int partition(int[] arr,int startIndex,int endIndex) {
		//取第一个位置(也可以选择随机位置)的元素作为基准元素
		int pivot=arr[startIndex];
		int mark=startIndex;
		for (int i = startIndex+1; i <=endIndex; i++) {
			if(arr[i]<pivot) {
				mark++;
				int p=arr[mark];
				arr[mark]=arr[i];
				arr[i]=p;
			}
		}
		arr[startIndex]=arr[mark];
		arr[mark]=pivot;
		return mark;
	}
	public static void main(String[] args) {
		int[] arr=new int[] {4,7,6,5,3,2,8,1};
		quickSort(arr, 0, arr.length-1);
		System.out.println(Arrays.toString(arr));
	}
	
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值