冒泡 选择 插入排序

冒泡排序 冒泡排序实现记口诀:n个数字来比较外层循环n-1,内层循环n-1-i

    public static void main(String[] args){
     //定义数组和变量
     int[] a={8,7,6,5,4};
     for(int i=0;i<a.length;i++){
        System.out.println(a[i]);
        }
        }
        static void sort (int [] a){
        for(int i=0;i<a.length-1;i++){//外循环
        for(int j=0;j<a.length-1-i;j++){//内循环
        if(a[j]>a[j+1]){
        int temp;//实现两个数的交换
        a[j]=a[j+1];
        a[j+1]=temp;
        }
        }
        }
        }
        }
  第一层:
第1次比较:(8,7

,)6,5,4
第2次比较: 7,(8,6)5,4
第3次比较:7,6,(8,5),4
第4次比较:7,6,5,(8,4)
展现结果:7,6,5,4,8
第二层:
第1次比较:(7,6),5,4,8
第2次比较:6,(7,5),4,8
第3次比较:6,5,(7,4),8
展现结果:6,5,4,7,8
第三层:
第1次比较:(6,5),4,7,8
第2次比较:5,(6,4),7,8
展现结果:5,4,6,7,8
第4层:
第1次比较:(5,4),6,7,8
展现结果:4,5,6,7,8
选择排序
算法思想:从头至尾扫描序列,找出一个最小的元素和第一个元素交换,接着从剩下的元素中继续这种选择和交换,直到成为一个有序数列。
原始数列:8,7,5,6,4
1,选择数列中有无序和有序两部分,开始为无序
8,7,5,6,4
2,从无序中选择一个最小的元素和第一个元素交换,此时就产生了一个元素的有序数列,无序数列减一。
{4},{7,5,6,8}
3,从无序序列中取出最小的元素5,将5同无序序列第一个元素交换,此时产生仅两个元素的有序序列,无序序列减一。
{4,5},{7,6,8}
4,从无序序列中取出最小的元素6,将6同无序序列第一个元素交换,此时产生含三个元素的有序序列,无序序列减一。
{4,5,6},{7,8}
5,从无序序列中取出最小的元素7,将7同无序序列第一个元素交换,此时产生含四个个元素的有序序列,无序序列减一。
{4,5,6,7},{8}
6,最后一个元素肯定是最大元素,无序排序直接生产一个有序的序列。
{4,5,6,7,8}

public static void main(String [] args){
    int [] a={8,7,5,6,4};
    selectSort(a);
    for(int i=0;i<a.length;i++){
      System.out.println(a[i]);
      }
      }
      static void selectSort(int[] a){
      //要经过n-1次比较
      for(int i=0;i<a.length-1;i++){
      int min=1;
      //每次比较n-i
      for(int j=i+1;j<a.length;i++){
      if(a[min]>a[j]){
      //记录目前能找到的最小元素的下标
      min=j;
      }
      }
      if(min!=i){
      int temp;//将找到的最小元素和i位置的的元素进行交换
      temp=a[i];
      a[i]=a[min];
      a[min]=temp;
      }
      }
      }
      }
      **插入排序**
      初始状态


a[0] a[1] a[2] a[3] a[4]
(4) 6 5 8 7
(4 6) 5 8 7
(4 5 6) 8 7
(4 5 6 7) 8
(4 5 6 7 8)

      public static void main(String [] args){
int []   a={4,6,5,8,7}
insertSort(a);
for(int i=0;i<a.length;i++){
System.out.println(a[i]);
}
}
static void insertSort(int []  a){
for(int i=0;i<a.length-1;i++){
int current=a[i+1];
int j=i;
while(j>=0 && a[j]>current){
a[j+1]=a[j];
j–;
}
a[j+1]=current;
}
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值