1、冒泡排序:
思想:分成(arrs.length-1)轮。每一轮都从前两个开始比较并判断大小,如果按升序排列则第一个数大于第二个数时换位置,往后一次比对第二个数和第三个数.......
a、简单冒泡排序:
public static void bubbleSort2(int [] arrs) {
for(int i = 0;i < arrs.length-1;i++) {
for(int j = 0;j < arrs.length-1;j++) {
if(arrs[j]<arrs[j+1]) {
int mid = arrs[j];
arrs[j] = arrs[j+1];
arrs[j+1] = mid;
}
}
}
}
b、考虑到每次最后一个数已经是最大的情况后,外层循环执行到第几次,内层循环减少外层循环的次数(第一次按0计算)。
public static void bubbleSort2(int [] arrs) {
for(int i = 0;i < arrs.length-1;i++) {
boolean b = true;
for(int j = 0;j < arrs.length-1-i;j++) { //每次执行完一趟最后的数都时最大的,所以每次都较少执行次数
if(arrs[j] > arrs[j+1]) {
int mid = arrs[j];
arrs[j] = arrs[j+1];
arrs[j+1] = mid;
b = false; //每次有两个元素置换位置后,b的值为false
}
}
if(b) { //判定如果一趟执行完成后,没有任何两个元素置换位置,则判定数组排序已完成
return;
}
}
}
2、选择排序:
思想:分内外双层循环,每一趟排序都拿出最前端的数和后面的数依次相比,每碰到比次数小(大)的都记录一次索引值,知道最后一次比较,确定所有数中最小(大)的数,和最前端的数互换位置。
public static void selectedSort2(int [] arrs) {
for(int i = 0;i < arrs.length-1;i++) {
int index = i;
for(int j = i+1;j < arrs.length;j++) {
if(arrs[index]>arrs[j]) {
index = j;
}
}
if(index != i) {
int mid = arrs[i];
arrs[i] = arrs[index];
arrs[index] = mid;
}
}
}
学习记录,未完待续。