快速排序作为八大排序的一种。
下面用例子来讲一下。
快速排序步骤:分为两大步
一:第一次排序
1:先把数组当中最左边的数当成基数。
2:定义i和j指针
3:向左移动j指针,找第一个小于基数5的数。向右移动i指针,找到比基数5大的数,然后交换
4:当i与j两指针相遇后,将相遇处数值与基数交换。
5:经过第一次排序后,我们会发现基数位置的左边的数都比基准数小,右边都比基准数大
二:采用递归的方法
1:以相遇处为基准,将数组分开
2:然后分别再对左右两边的小数组进行快速排序,此处再次调用sort方法,运用到递归
下面为快速排序代码(数组中的数据与上述例子不同,例子中的数据简但)
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr = {654,123,7,12,987,122,234,18,46,10};
sort(arr,0,arr.length-1);
System.out.println(Arrays.toString(arr));
}
public static void sort(int[] arr,int left,int right) {
if(left>right) {
return;
}
//定义一个基数
int base = arr[left];
//定义变量i指向最左边
int i = left;
//定义变量j指向最右边
int j = right;
//i,j不相遇
while (i!=j){
while (arr[j] >= base && i<j){
j--;
}
while (arr[i] <= base && i<j){
i++;
}
//交换
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
//i与j相遇,第一个与基数交换
arr[left] = arr[i];
arr[i] = base;
sort(arr,left,i-1);
sort(arr,i+1,right);
}