快速排序法
这种排序的方法是我自己摸索的比较快速的排序方法
public static void sort(int[] arr) {
//测试排序的次数,可以删除
int count = 0;
//与相邻值判断的边界值
int max = arr.length - 1;
int min = 0;
//可以动的边界值
int d = max;
int x = min;
//向右移动的中值
int midd = arr.length/2;
//向左移动的中值
int midx = arr.length/2;
//换位值
int temp = 0;
while (true) {
//未找到的最大值、最小值
max = d;
min = x;
if(arr.length/2 + count <= 6 && arr.length/2 - count >= 2) {
midd = arr.length/2 + count;
midx = arr.length/2 - count;
}else {
midd = arr.length / 2;
midx = arr.length / 2;
}
//判断值
boolean p = true;
boolean b = true;
boolean o = true;
//从大到小排列的数跳过
while (arr[max] >= arr[max - 1] && max > 1) {
max--;
}
if (arr[max] < arr[max - 1]) {
p = false;
temp = arr[max - 1];
arr[max - 1] = arr[max];
arr[max] = temp;
}
while (arr[midd] >= arr[midd - 1] && midd > 1) {
midd--;
}
if (arr[midd] < arr[midd - 1]) {
p = false;
temp = arr[midd - 1];
arr[midd - 1] = arr[midd];
arr[midd] = temp;
}
while (arr[min] <= arr[min + 1] && min < arr.length - 2) {
min++;
}
if (arr[min] > arr[min + 1]) {
b = false;
temp = arr[min + 1];
arr[min + 1] = arr[min];
arr[min] = temp;
}
while (arr[midx] <= arr[midx + 1] && midx < arr.length - 2) {
midx++;
}
if (arr[midx] > arr[midx + 1]) {
b = false;
temp = arr[midx + 1];
arr[midx + 1] = arr[midx];
arr[midx] = temp;
}
if(p || b) {
for (int i = 0; i < arr.length; i++) {
if(arr[i] > arr[i + 1]) {
o = false;
}else {
if(p && b){
//提示词,可删除
System.out.println("完成");
//排序次数,与结果
System.out.println(Arrays.toString(arr) + "" + count+"="+max+"---"+min);
return;
}
}
}
}
//排序次数与过程
count++;System.out.println(Arrays.toString(arr)+"======");
//完成一次循环,缩小范围
if(min == d){
d--;
}else if(max == x) {
x++;
}
}
}
上述代码还可简化,暂时就这样。