快速排序算法和冒泡排序算法类似,都是基于交换排序的思想;
具体步骤:
- 设定一个分解值,通过该分界值将数组分成左右两个部分;
- 大于该分界值的在右边,小于分界值的在左边,等于分界值的不变;
- 左边和右边独立的排序;
- 重复上述过程;
实现思路
- 选取分界值,选数组中间的那一个作为分界值;
- 左右两个指针运行,当左边的指针内的数大于分界值停止,当右边的指针小于分界值停止,交换左右两指针的数据;
- 指针继续运行,直到左指针大于右指针时停止;
- 然后数组份成左右两部分,两部分独立的进行从 1 开始的步骤;
代码实现
public void quickSort(int[] arr,int left,int right) {
int b = arr[(left+right)/2]; //分界值
int leftIndex = left;
int rightIndex = right;
while(rightIndex>leftIndex) {
while(arr[leftIndex]<b) {leftIndex++;}
while(arr[rightIndex]>b) {rightIndex--;}
if(rightIndex>=leftIndex) {
int temp = arr[leftIndex];
arr[leftIndex] = arr[rightIndex];
arr[rightIndex] = temp;
leftIndex++;
rightIndex--;
}
if(rightIndex==leftIndex) {
leftIndex++;
}
}
if(left<rightIndex) {
quickSort(arr,left,leftIndex-1);
}
if(right>leftIndex) {
quickSort(arr,rightIndex+1,right);
}
}