No.1
// 正常的两两交换实现
private static void sort1(int[] a) {
// TODO Auto-generated method stub
int time = 0;
int temp = 0;
for (int i = 0; i < a.length-1; i++) {
for (int j = 0; j < a.length-1; j++) {
if(a[j]>a[j+1]) {
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
time++;
}
}
System.out.println("跑了:"+time+"次");
System.out.println(Arrays.toString(a));
}
No.2
// 当数组后面的排好过后就不在运行实现
private static void sort2(int[] a) {
// TODO Auto-generated method stub
//次数变量
int time = 0;
//中间变量
int temp = 0;
//控制变量---boolean flag 当数组顺序在已经排好的情况下,后面的次数不在执行
for (int i = 0; i < a.length-1; i++) {
//控制变量---boolean flag 当数组顺序在已经排好的情况下,后面的次数不在执行
boolean flag = true;
for (int j = 0; j < a.length-i-1; j++) {
//如果相邻两数,左大于右,则互换位置
if(a[j]>a[j+1]) {
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
//有位置交换,设控制变量为false
flag = false;
}
time++;
}
//判定当数组顺序在已经排好的情况下,后面的次数不在执行,跳出外循环
if(flag) {
break;
}
}
System.out.println("跑了:"+time+"次");
System.out.println(Arrays.toString(a));
}
No.3
private static void sort3(int[] a) {
// TODO Auto-generated method stub
int temp = 0;
//排序的起始和结束位置
int end = a.length-1;
int start = 0;
//中间变量
int k = 0;
int p =0;
//次数变量
int time = 0;
//外循环控制每次执行多少次
for (int i = 0; i < a.length-1; i++) {
//控制变量---boolean flag 当数组顺序在已经排好的情况下,后面的次数不在执行
boolean flag = true;
//内循环1控制从左向右查找最大数字
for (int j = start; j < end; j++) {
//如果相邻两数,左大于右,则互换位置
if(a[j]>a[j+1]) {
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
//有位置交换,设控制变量为false
flag = false;
//获取最后判定的下标
k=j;
}
//次数++
time++;
}
//判定当数组顺序在已经排好的情况下,后面的次数不在执行,跳出外循环
if(flag) {
break;
}
//把获取的下标赋值给end变量
end = k;
//内循环2控制从右向左查找最小数字
for (int j = end; j > start; j--) {
//如果相邻两数,左小于右,则互换位置
if(a[j]<a[j-1]) {
temp = a[j];
a[j] = a[j-1];
a[j-1] = temp;
//有位置交换,设控制变量为false
flag = false;
//获取最后判定的下标
p=j;
}
time++;
}
//判定当数组顺序在已经排好的情况下,后面的次数不在执行,跳出外循环
if(flag) {
break;
}
//把获取的下标赋值给start变量
start = p;
}
System.out.println(time);
System.out.println(Arrays.toString(a));
}
No.4
private static void sort4(int[] arr) {
// 开始下标,结束下标
int start = 0;
int end = arr.length-1;
// 中间变量
int temp = 0;
int rap = 0;
// 次数
int time = 0;
// 外循环控制次数
for (int i = 0; i < arr.length-1; i++) {
// 内循环控制下标的每次判断
for (int j = start; j < end; j++) {
// 实现满足条件就交换
if (arr[j]>arr[j+1]) {
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
// 把末尾值给rap存上给开始
rap = j;
}
// 次数
time++;
}
// 开始下标给末尾
end = start;
// 末尾给开始
start = rap;
// 从后面往前面跑
for (int j = start; j > end; j--) {
// 交换
if (arr[j-1]>arr[j]) {
temp = arr[j];
arr[j] = arr[j-1];
arr[j-1] = temp;
rap = j;
}
// 次数
time++;
}
// 开始给结尾,结尾给开始
end = start;
start = rap;
}
System.out.println(Arrays.toString(arr));
System.out.println(time);
}
这里详细介绍了怎么排序的,怎么实现的,如有不对请指出!