原理
快速排序是在冒泡排序上的改进,冒泡排序每次只比较相邻的两个元素,而快速排序每次交换是跳跃式的,首先选择一个基准数base(通常选择第一个元素),将小于等于base的数据全部置于左边,将大于等于base的数据全部置于右边
- 时间复杂度 O(nlog 2n)
代码实现
// 每一轮快排 都将数据分为两部分
public void quickSort(int[] arr,int right.int left){
int base =array[left];
int i = left;
int j = right;
while(j>i){
while(i<j && arr[j] > base){
j--;
}
while(i<j && arr[i] < base){
i++;
}
if(i<j){
int temp = array[i]
array[i]= array[j]
array[j]= temp
}
// 更新base值
// 如果左右侧的标记停止时,并且都在同一个i=j位置,将这个数字和 base的数字交换
arr[left] = a[i];
arr[i] =base;
}
// 左部分递归排序
if(i-1 > left){
arr = quickSort(arr,left,i-1);
}
// 右部分递归排序
if(j+1 < right){
arr = quickSort(arr,j+1,right);
}
return arr;
}
----------------------------
// 返回分割点
public int partion(int[] array,int i,int j){
int base =array[i];
while(i<j){
while(i<j && array[j]>=base){
j--;
}
while(i<j && array[i)<=base){
i++;
}
swap(array,i,j);
}
return i;
}
// 交换数据
public void swap(int[] array,int i,int j){
int temp = array[i]
array[i]= array[j]
array[j]= temp
}