java实现快速排序(思路与实现)

1:基本思想:

快速排序是属于交换类排序,采用不断的比较和移动来实现排序。快速排序是一种非常高效的排序算法,它的实现,增大了记录和比较和移动的距离,从而减少总的比较此时和移动次数。采用分而治之的思想,将一个大的问题拆成一个小的问题,小的问题拆成更小的问题。

快速排序(英语:Quicksort),又称划分交换排序(partition-exchange sort),通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

步骤为:

  1. 从数列中挑出一个元素,称为"基准"(pivot),
  2. 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区结束之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。
  3. 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会结束,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。

快速排序的分析


实现代码:

public class Quick
{
	public static void main(String[] args)
	{
		int[] ins = {2,3,5,1,23,6,78,34};
		int[] ins2 = sort(ins,0,ins.length-1);
		for(int in: ins2){
			System.out.println(in);
		}
	}
	
	public static int[] sort(int[] ins ,int start,int end){
		
		if(start>=end){
			return ins;//这个返回值并没有影响,因为这个返回值没有使用到。
		}
		int mid = ins[start];
		int low = start;
		int hight = end;
		while(low < hight){
			while(low < hight && ins[hight]>=mid){//
				hight -=1;
			}
			ins[low] = ins[hight];
			
			while(low < hight && ins[low] < mid){
				low +=1;
			}
			ins[hight] = ins[low];
		}
		ins[low] = mid;
		sort(ins, start, low-1);
		sort(ins, low+1, end);
		return ins;
	}
}



猜你喜欢

转载自blog.csdn.net/qq_28081081/article/details/80597455