1.选择排序
对比0~n-1
通过比较值 将值小的放0位
对比1~n-1
通过比较值 将值小的放1位
以此类推
......
对比n-2~n-1
通过比较值 将值小的放n-2位
2.冒泡排序
对比0~n-1
0 1 位置进行对比 值大的 往后
然后1 2 进行对比 值大的放2
两两对比值大的 放后面 最终 n-1的值是最大的
以此类推
....
....
3.插入排序
下标:0-0 有序
下标:0-1 有序 对比大小 小的往前
下标:0-2 有序对比大小 小的往前
下标:0-3 有序对比大小 小的往前
.....
以此类推
int num[]={1,9,6,7,5,8,4};
//1.拆入排序:0-0 位置有序 0-1有序 0-2位置有序 0-3位置有序
//i=1 m=0 1与9 比较 9大 不交换了 m--=-1 跳出
//i=2 m=1 9与6比较 9大 交换位置 1 6 9 m-- =0 继续 然后0跟1 比较 1 跟 6比较 6大 不处理 跳出 结果是1697584
//i=3 m=2 9与7比较 9大 交换位置 167 9 m--=1 继续 6vs7 小于 不处理 继续 m--=0 1vs6 小于不处理 1679584
//i=4 m=3 9vs5 9大 交换 1675984 m--=2 7vs5 交换 1657984 m--=1 6vs5 交换 1567984 m--=0 1vs5 不处理跳出
//i=5 m=4 9vs8 9大 交换 1567894 m--=3 7vs8 小于不交换 我感觉此时就没必要在往前判断了 因为前面已经排序好了 但是我们程序还会m-- 然后在判断一次。是否可以省略?
//i=6 m=5 9vs4 9大 交换 1567849 m--=4 8vs4 交换 1567489 m--=3 7vs4 交换 1564789 m--=2 6vs4 交换 1546789 m--=1 5vs4 交换 1456789 m--=0 1vs4 不交换结束
void insertSort(int [] num){
for(int i=1;i<num.length;i++){
for(int m=i-1;m>=0;m--){
if(num[m]>num[m+1]) {
int tem = num[m + 1];
num[m + 1] = num[m];
num[m] = tem;
}else{
break;
}
}
}
for(int sortNum:num){
System.out.print(sortNum+" ");
}
}
// int num[]={1,9,6,7,5,8,4};
//2.冒泡排序 : 对比0~n-1 0 1 位置进行对比 值大的 往后 然后1 2 进行对比 值大的放2 两两对比值大的 放后面 最终 n-1的值是最大的
//i=6 j=1 拿j-1 与 j 进行对比 1比9小 不替换位置
//在循环 拿 9 与6 比较 9大 替换位置 在循环 拿9与7 比较 9大 替换位置 在++ 拿9与5比较 9大 替换位置.... 9与4比较 9大 替换位置 1675849
//第二个外循环 i=5了 因为这个 num[6]=9 最大了 拿着1675849 在循环比较 j<=i 所以9 是不会读到了
//1与6比较 6大 不动 6与7比较 7大 不动 7与5比较 7大 替换位置 7与8比较 8大不动 8与4 比较 8大 替换位置 得到结果1657489
void bubbleSort(int [] num){
for(int i=num.length-1;i>=0;i--){
for(int j=1;j<=i;j++){
if(num[j-1]>num[j]){
int tem=num[j-1];
num[j-1]=num[j];
num[j]=tem;
}
}
for(int sortNum:num){
System.out.print(sortNum+" ");
}
System.out.println();
}
for(int sortNum:num){
System.out.print(sortNum+" ");
}
}
//3.选择排序: 遍历数组最小的 放0 然后在遍历数组 最小的放1 .。。。最小的放n-1
// int num[]={6,7,5,8,4};
void chooseSort(int [] num){
//i=0 6 7 比较 6小 6跟5比 5小下标就是5 5跟8比较 还是5 5跟4比较 4小 返回4的下标 然后4的下标跟当前这6的下标换位置
//那就变成了4 7 5 8 6
//这时候 i=1 7 跟5比较 5小 5跟8比较 5小 5 跟6比较5 小 那5跟7 换位置
//变成了 4 5 7 8 6
//这时候 i=2 7跟8比较 7小 7跟6比较 6小 6跟7换位置
//这时候变成了45687
//这时候 i=3 8跟7比较 7小 7 跟 8换位置
//这时候变成了45678
//这时候 i=4 8每人比较 又执行了换位置 自己跟自己换
for(int i=0;i<num.length;i++){
int minIndex=i;
for(int m=i+1;m<num.length;m++){
int secondNum=num[m];
minIndex=secondNum<num[minIndex]?m:minIndex;
}
int temp=num[minIndex];
num[minIndex]=num[i];
num[i]=temp;
}
for(int sortNum:num){
System.out.print(sortNum+" ");
}
}