今天接到阿里实习的笔试通知于是从现在开始就要准备找工作的节奏了,java快速排序可以用前后两个游标一直往前移这样(标准是这样),但是网上找寻资料发现可以不用这样。先贴出代码:
import java.util.Scanner;
public class QuickSort {
public static void main(String[] args) {
int length = 0;
Scanner sc = new Scanner(System.in);
length = sc.nextInt();
int[] arry = new int[length];
for (int i = 0; i < length; i++) arry[i] = sc.nextInt();
quic_sort(arry, 0, length-1);
for (int i = 0; i < arry.length; i++) System.out.print(arry[i]+" ");
System.out.println();
}
public static void quic_sort(int[] arry,int start,int end){
int loction=0;
if(start<end)
{
loction = quick_sort_location(arry, start, end);
quic_sort(arry, start, loction-1);//递归遍历左边部分
quic_sort(arry, loction+1, end);//递归遍历右边部分
}
}
public static int quick_sort_location(int[] arry, int start, int end) {
int position = start - 1;//position其实是用来记录最后Flag(所有左边的值都比它小..)的位置,也就是等于起始位置+比它小的值
int length = arry.length;
int flag = arry[end];
for (int i = start; i < end; i++) {
if (arry[i] <= flag) {
position += 1;//每次碰到比他小的值都+1
int tmp = arry[i];
arry[i] = arry[position];
arry[position] = tmp;
}
}
position++;//最后要自加1因为已经找到了Position-start个元素比Flag小所以Flag应该位于数组的start+postion位置
int tmp2 = arry[position];
arry[position] = arry[end];
arry[end] = tmp2;
return position;
}
}
这个是进行第一次比较后的过程第七趟自己和自己比我就不写了!
总结:不管是两个指针在那里游走也好,还是这种其实都是一种分治策略吧!都是把大问题分成两个小问题