方法一:
package paixu;
import java.util.Arrays;
/**
* 快速排序
*/
public class fastSort {
public static void main(String[] args) {
int[] nums = new int[]{23,34,45,56,67,4,3,2,3,4};
sort(nums,0,9);
System.out.println(Arrays.toString(nums));
}
public static void sort(int[] nums,int start,int end){
int cun = nums[start];
int qian = start;
int hou = end;
while (qian<hou){
while (qian<hou && nums[hou]>=cun){
hou--;
}
if(nums[hou]<cun){
nums[qian++] = nums[hou];
}
while (qian<hou && nums[qian]<=cun){
qian++;
}
if(nums[qian]>cun){
nums[hou--] = nums[qian];
}
}
nums[qian] = cun;
if(start<qian) {sort(nums,start,qian-1);}
if(hou<end) {sort(nums,qian+1,end);}
}
}
方法二:
package paixu;
import java.util.Arrays;
/**
* 快速排序
*/
public class fastSort {
public static void main(String[] args) {
int[] nums = new int[]{23,34,45,56,67,4,3,2,3,4};
sort(nums,0,9);
System.out.println(Arrays.toString(nums));
}
public static void sort(int[] nums,int start,int end){
int cun = nums[start];
int qian = start;
int hou = end;
while (qian<hou){
while (qian<hou && nums[hou]>=cun){
hou--;
}
if(nums[hou]<cun){
int i = nums[qian];
nums[qian] = nums[hou];
nums[hou] = i;
}
while (qian<hou && nums[qian]<=cun){
qian++;
}
if(nums[qian]>cun){
int i = nums[qian];
nums[qian] = nums[hou];
nums[hou] = i;
}
}
if(start<qian) {sort(nums,start,qian-1);}
if(hou<end) {sort(nums,qian+1,end);}
}
}
两处代码乍看是一样的,第一种方式相对比较好点,不用交换’cun‘的值,在最后把cun的值赋值给中间的qian==hou的那个变量,第二种方法就每一次交换都让cun跑来跑去,最后才安稳在qian==hou的地方,好吧,就是这个简单思路。
方法3:c++代码实现:
这个是目前为止见到过最简洁的代码(acwing大佬):
void quick_sort(int p[], int l, int r) {
if (l >= r) return;
int mid = p[l + r >> 1];
int i = l - 1, j = r + 1;
while (i < j) {
while (p[++i] < mid);
while (p[--j] > mid);
if (i < j) swap(p[i], p[j]);
}
quick_sort(p, l, j);
quick_sort(p, j + 1, r);
return;
}