快速排序

快速排序算法思想

(1)先从待排序记录中选取一个作为枢轴(pivot),并增设两个指针low和high分别指向待排序记录的首和尾;

(2)然后从high指针开始向前搜索,当找到小于枢轴的记录,则将此记录与枢轴记录的位置进行交换,接着从low指针出发向后搜索,当找到大于枢轴的记录,同样将此记录与枢轴位置进行交换;

(3)重复上面操作,直到low和high指向同一位置为止,再将枢轴放到该位置,即为一趟快速排序,递归地调用算法,多趟排序后即可排好。

 

 

快速排序算法的实现分为三个阶段:

(1)一次划分或一趟排序

(2)对子序列排序

(3)程序路口引入待排序列

 

package quick;


public class quick {
	public static int partition(int[] arr,int left,int right)
	{
		int base=arr[left];
		while(left<right) {
			while(left<right&&arr[right]>base)
			{
				right--;
			}
			arr[left]=arr[right];
			while(left<right&&arr[left]<=base)
			{
				left++;
			}
			arr[right]=arr[left];
		}
		arr[left]=base;
		return left;
	}
	
	public static void sort(int[] arr,int left,int right)
	{
		if(left<right)
		{
			int index=partition(arr,left,right);
			sort(arr,left,index);
			sort(arr,index+1,right);
		}
	}
	public static void printpart(int[] arr,int left,int right)
	{
		for(int i=left;i<=right;i++)
		{
			System.out.print(arr[i]+"\t");
		}
		System.out.println();
	}
	
	public static void main(String[] args)
	{
		int arr[]= {21,11,54,19,45};
		System.out.print("排序前:\t");
		printpart(arr,0,arr.length-1);
		sort(arr,0,arr.length-1);
		System.out.print("排序后:\t");
		printpart(arr,0,arr.length-1);
	}
	
}

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值