快速排序Java实现
程序员文章站
2022-07-14 08:05:36
...
按照快排的思想写了写快排,也不知道有没有bug,不过我觉得这个代码的关键点是:
// 此时分为两部分,分别操作 qs(nums, low, index - 1); qs(nums, index+1, high);
这一部分,一开始我把low和high写错了,导致看了好久不知道哪里错了????
package test;
public class Test {
private void qs(int []nums, int i, int j){
for(int k = 0; k < nums.length; k++){
System.out.print(nums[k] + " ");
}
System.out.println();
if(i < 0 || j < 0 || i > nums.length-1 || j > nums.length - 1 || i >= j){
return;
}
int low = i;
int high = j;
// 获得基准值
int key = nums[i];
int index = i;
i += 1;
while(i <= j){
// 如果是比它大的,则一直走
while(nums[j] >= key && i <= j){
j -= 1;
}
if(i <= j && nums[j] < key){
nums[index] = nums[j];
index = j;
j -= 1;
}
// 如果是比它小的,则一直走
while(nums[i] <= key && i <= j){
i += 1;
}
if(i <= j && nums[i] > key){
nums[index] = nums[i];
index = i;
i += 1;
}
}
// 执行完后,得到index为填入key
nums[index] = key;
// 此时分为两部分,分别操作
qs(nums, low, index - 1);
qs(nums, index+1, high);
}
private void quichSort(int[]nums){
qs(nums, 0, nums.length-1);
}
public static void main(String[] args) {
Test t = new Test();
t.quichSort(new int[]{6,9,8,7,2,5,4,3,1});
}
}