常用排序算法-快速排序

一:主要思想

快速排序是冒泡程序的改进(冒泡排序中,比较和移动元素的个数是在相邻元素中进行的,元素比较移动的次数相对较多)

快速排序是元素有两端向中间移动,元素较小的从后面移动到前面,元素较大的从前面移动到后面,从而减少移动的次数)

二:问题

1:如何选择中心轴值

2:如何进行一次性划分

3:如何处理划分好的子序列

4:快速排序结束的标志

三:问题的解决方案:

1:中心轴值我们一般选取待排序第一个元素

2:两个下标i,j,进行右扫描和左扫描,知道i<j为止

3:分区只剩下一个记录为止

四:程序原代码

 

package com.ccut.quickSort;

import java.util.Arrays;

public class QuickSort {
	public static void main(String[] args) {
		int[] array = { 0, 4, 54, 6, 8, 9, 4, 9, 12, 32 };
		QuickSort(array, 0, array.length - 1);
		System.out.print(Arrays.toString(array));
	}

	/**
	 * 快速排序
	 */
	private static void QuickSort(int[] array, int first, int end) {
		if (first < end) {
			int i=Partition(array,first,end);
			QuickSort(array, first,i-1);
			QuickSort(array,i+1,end);
		}

	}

	/**
	 * 进行一次性快排
	 */
	private static int Partition(int arr[], int first, int end) {
		while (first < end) {
			// 进行左扫描
			while (first < end && arr[first] <= arr[end]) {
				end--;
			}
			if(first<end)
			{
				int temp = arr[first];
				arr[first] = arr[end];
				arr[end] = temp;
			}
			
			// 进行右扫描
			while(first < end && arr[first]<= arr[end]) {
				first++;
			}
			if(first<end)
			{
				int temp = arr[first];
				arr[first] = arr[end];
				arr[end] = temp;
			}
		}
		return first;
	}
}

五:时间复杂度:

最好(O(nlog2n))

最换(正序或者逆序)  O(n2)

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值