int[] arry = {20,15,98,35,46,87,14,26};
假设我们现在有一个名字为int 类型的数组 arry,我们想办法让他进行从小到大的排序
1、冒泡排序
从第一个数字开始,两两之间进行比较,如果数大就排到后边,数小就往前去
每一遍要排出最大的数
第一遍排出最大的数 放在最后
第二遍排出第二大的数 放在倒数第二个位置
.
.
.
20 15 98 35 46 87 14 26
第一回:
第一次 20和15比较 15 20 98 35 46 87 14 26
第二次 20和98比较 15 20 98 35 46 87 14 26
第三次 98和35比较 15 20 35 98 46 87 14 26
第四次 98和46比较 15 20 35 46 98 87 14 26
第五次 98和87比较 15 20 35 46 87 98 14 26
第六次 98和14比较 15 20 35 46 87 14 98 26
第七次 98和26比较 15 20 35 46 87 14 26 98
第一回一共排了 7 次
第一回排完的结果为 15 20 35 46 87 14 26 98
第二回
第一次 15和20比较 15 20 35 46 87 14 26 98
第二次 20和35比较 15 20 35 46 87 14 26 98
第三次 35 和46比较 15 20 35 46 87 14 26 98
第四次 46和87比较 15 20 35 46 87 14 26 98
第五次 87和14比较 15 20 35 46 14 87 26 98
第六次 87和26比较 15 20 35 46 14 26 87 98
第二回一共排了 6 次
第二回排完的结果为 15 20 35 46 14 26 87 98
第三回
第一次 15和20比较 15 20 35 46 14 26 87 98
第二次 20和35比较 15 20 35 46 14 26 87 98
第三次 35和46比较 15 20 35 46 14 26 87 98
第四次 46和14比较 15 20 35 14 46 26 87 98
第五次 46和26比较 15 20 35 14 26 46 87 98
第三回一共排了 5 次
第三回排完的结果为 15 20 35 14 26 46 87 98
第四回
第一次 15和20比较 15 20 35 14 26 46 87 98
第二次 20和35比较 15 20 35 14 26 46 87 98
第三次 35和14比较 15 20 14 35 26 46 87 98
第四次 35和26比较 15 20 14 26 35 46 87 98
第四回一共排了 4 次
第四回排完的结果为 15 20 14 26 35 46 87 98
第五回
第一次 15和20比较 15 20 14 26 35 46 87 98
第二次 20和14比较 15 14 20 26 35 46 87 98
第三次 20和26比较 15 14 20 26 35 46 87 98
第五回一共排了 3 次
第五回排完的结果为 15 14 20 26 35 46 87 98
第六回
第一次 15和14比较 14 15 20 26 35 46 87 98
第二次 15和20比较 14 15 20 26 35 46 87 98
第六回一共排了 2 次
第六回排完的结果为 14 15 20 26 35 46 87 98
第七回
第一次 14和15比较 14 15 20 26 35 46 87 98
第七回一共排了 1 次
第七回排完的结果为 14 15 20 26 35 46 87 98
【注意】就剩下一个14了所以他就是最小的
在这个有8个元素的数组当中,我们一共排了7回,
第一回 7次
第二回 6次
第三回 5次
第四回 4次
第五回 3次
第六回 2次
第七回 1次
我们运用嵌套for循环的理念,一个控制回------一共控制次 就可以进行排序了
我们写排序算法能用的东西只有,数组长度 循环定义的变量,通过它们三个找规律
public class Demo2 {
//冒泡排序
public static void main(String[] args) {
int[] arry = {20,15,98,35,46,87,14,26};
//控制回
for (int i=0; i<arry.length-1; i++) {
//控制次
for(int j=0;j<arry.length-1-i;j++) {
//如果后边的数大于前边的数
if(arry[j] > arry[j+1]) {
//定义一个变量temp,接收前边的数
int temp = arry[j];
//把后边的数赋值给前边的数
arry[j] = arry[j+1];
//把大的数也就是temp给后边的数
arry[j+1] = temp;
}
}
}
System.out.println("排序之后的结果");
for(int i=0;i<arry.length-1;i++) {
System.out.print(arry[i] + " ");
}
}
}
2、选择排序
从第一个数开始,只用第一个数去和后边的每一个数去进行比较(冒泡排序是相邻两个数两两之间进行比较),如果后边的数比他小就放到前边,再拿这个更小的数去和后边的数比较,直至比完找出第一个小的数,再拿第二个数去依次比较,选择排序排升序是从最小的找,一直找到最大的,(冒泡排序排升序是从最大的找,一直找到最小的)
每一遍要排出最小的数
第一遍排出最小的数 放在最前
第二遍排出第二小的数 放在第二个位置
.
.
.
20 15 98 35 46 87 14 26
第一回:
第一次 20和15比较 20 15 98 35 46 87 14 26
第二次 15和98比较 15 20 98 35 46 87 14 26
第三次 15和35比较 15 20 98 35 46 87 14 26
第四次 15和46比较 15 20 98 35 46 87 14 26
第五次 15和87比较 15 20 98 35 46 87 14 26
第六次 15和14比较 15 20 98 35 46 87 14 26
第七次 14和26比较 14 20 98 35 46 87 15 26
第一回一共排了 7 次
第一回排完的结果为 14 20 98 35 46 87 15 26
第二回
第一次 20和98比较 14 20 98 35 46 87 15 26
第二次 20和35比较 14 20 98 35 46 87 15 26
第三次 20 和46比较 14 20 98 35 46 87 15 26
第四次 20和87比较 14 20 98 35 46 87 15 26
第五次 20和15比较 14 20 98 35 46 87 15 26
第六次 15和26比较 14 15 98 35 46 87 20 26
第二回一共排了 6 次
第二回排完的结果为 14 15 98 35 46 87 20 26
第三回
第一次 98和35比较 14 15 98 35 46 87 20 26
第二次 35和46比较 14 15 35 98 46 87 20 26
第三次 35和87比较 14 15 35 98 46 87 20 26
第四次 35和20比较 14 15 35 98 46 87 20 26
第五次 20和26比较 14 15 20 98 46 87 35 26
第三回一共排了 5 次
第三回排完的结果为 14 15 20 98 46 87 35 26
第四回
第一次 98和46比较 14 15 20 98 46 87 35 26
第二次 46和87比较 14 15 20 46 98 87 35 26
第三次 46和35比较 14 15 20 46 98 87 35 26
第四次 35和26比较 14 15 20 35 98 87 46 26
第四回一共排了 4 次
第四回排完的结果为 14 15 20 26 98 87 46 35
第五回
第一次 98和87比较 14 15 20 26 98 87 46 35
第二次 87和46比较 14 15 20 26 87 98 46 35
第三次 46和35比较 14 15 20 26 46 98 87 35
第五回一共排了 3 次
第五回排完的结果为 14 15 20 26 35 98 87 46
第六回
第一次 98和87比较 14 15 20 26 35 98 87 46
第二次 87和46比较 14 15 20 26 35 87 98 46
第六回一共排了 2 次
第六回排完的结果为 14 15 20 26 35 46 98 87
第七回
第一次 98和87比较 14 15 20 26 35 46 98 87
第七回一共排了 1 次
第七回排完的结果为 14 15 20 26 35 46 87 98
【注意】就剩下一个98了所以他就是最大的
在这个有8个元素的数组当中,我们一共排了7回,
第一回 7次
第二回 6次
第三回 5次
第四回 4次
第五回 3次
第六回 2次
第七回 1次
此时的这个次数 代表和后边的每一个数进行比较(前边固定的时候就不看了)
一共比较了多少次那也可以说后边有多少个数
因为每有一个数就需要比较一次
所以多少次就证明后边有多少个要比较的数
次数和要比较的数的个数是相等的
运用for循环原理外层控制回,内层控制当前元素和后边比较的元素的个数
//选择排序
public class Demo9 {
public static void main(String[] args) {
int[] arry = {20,15,98,35,46,87,14,26};
//控制当前的轮回数
for (int i = 0; i < arry.length-1; i++) {
//控制和后边比较数的个数
// j+1 :后边要比较的第一个数
//arry.length:后边比较数的个数
for (int j=i+1; j < arry.length; j++) {
//前边的数大于后边的数
//j会一直自加,直至把后边每一个数遍历完
if(arry[i] > arry[j]) {
//设定一个temp变量接收arry[i]的值
int temp = arry[i];
//把后边大的数给前边的数
arry[i] = arry[j];
//把temp的值给后边
arry[j] = temp;
}
}
}
System.out.println("排序之后的结果");
for(int newArry : arry) {
System.out.print(newArry + " ");
}
}
}