冒泡,选择,插入排序
public class Buble {
public static void main(String[] args) {
//创建一维数组
int[]arr={11,4,7,2,55,9};
System.out.println("冒泡排序后数据为");
bubble(arr);
list(arr);
System.out.println();
int[]arr1={3,6,1,98,7,66,2};
System.out.println("选择排序后数据为");
select(arr1);
list(arr1);
System.out.println();
int[]arr2={11,32,1,3,76,8,56};
System.out.println("插入排序后数据为");
insert(arr2);
list(arr2);
}
private static void insert(int[] arr2) {
//外层控制轮
for(int i=0;i<arr2.length-1;i++){
//内层控制次数
for(int j=i+1;j>0;j--){
if(arr2[j]<arr2[j-1]){
change(j,j-1,arr2);
}else{
break;
}
}
}
}
private static void select(int[] arr1) {
// 外层控制轮数
for (int i = 0; i < arr1.length-1; i++) {
//内层控制次数
int t = i;
for (int j = i+1; j < arr1.length; j++) {
if(arr1[t]>arr1[j]){
t = j;
}
}
if(t!=i){
change(t,i,arr1);
}
}
}
private static void list(int[] arr) {
//遍历数组,输出数组
for (int i : arr) {
System.out.print(i+" ");
}
}
private static void bubble(int[] arr) {
//外层控制轮数
for (int i = 0; i < arr.length-1; i++) {
//内层控制次数
for (int j = 0; j < arr.length-1-i; j++) {
if(arr[j]>arr[j+1]){
//两个数位置互换
change(j,j+1,arr);
}
}
}
}
private static void change(int i, int j, int[] arr) {
// 交换两个数的位置
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
总结
冒泡排序的思路
冒泡就像鱼吐得泡泡一样,泡泡越来越大,连起来看就是小泡泡在下面,大泡泡在上面。联想到数字就是大的数字在上面,小的数在下面。给你一个串数字,根据冒泡排序的方法演示就是这样的 假如有这样的数字11,4,7,2,55,9。
第一次比较 : 4,7,2,11,9,55 就是两个数两两比较
第二次比较 : 4,2,7,9,11 由于最大的数已经出来就不用比较最后一个了
第三次比较 : 2,4,7,9
第四次比较 : 2,4,7
第五次比较 : 2,4
第六次比较 : 2
其实最后一次就没进入循环,因为一共6个数,前五个大的数都找出来了,自然而然最小的数也出来了。
选择排序
选择排序,就是先拿出一个数,假设是最小的数,一个一个的跟后面的数进行比较。找到最小的数,由于是在数组中操作的。所以我们只需记住这个数的下标,当比较完毕,看看这个下标跟之前假设最小值的下标是否相等,不相等,让他们两个数进行交换。
插入法排序
插入法排序,先让两个数进行排序,当第三个数进来时,只需要跟第二个数比较,当它大于最二个数是,直接插入这个数的后面。当它小于第二个数时,依次跟前两个数比较。后面的数也是这样跟前面的数进行比较。
总的来说,后面两种方法都是根据冒泡排序方法延伸而来,主要是考虑到效率问题,后面的方法相对于冒泡来说依次少比较了很多次。