冒泡选择插入排序(步骤详解)

冒泡排序

每轮两两比较,必要时交换位置,找出一个最大数,最大数都排到该轮后面

9 6 4 8 3 5

六个数 比较5轮            

第一轮:964835 比较5 次   

6 9 4 8 3 5  6--9                 

6 4 9 8 3 5  4--9

6 4 8 9 3 5  8--9

6 4 8 3 9 5  3--9

6 4 8 3 5 9  5--9

第二轮:64835 比较4次

4 6 8 3 5 9  4--6

4 6 8 3 5 9  6--8

4 6 3 8 5 9  3--8

4 6 3 5 8 9  5--8

第三轮4635 比较3次

4 6 3 5 8 9  4--6

4 3 6 5 8 9  3--6

4 3 5 6 8 9  5--6

第四轮435 比较2次

3 4 5 6 8 9  3---4

3 4 5 6 8 9  4--5

第五轮 34 比较1次

3 4 5 6 8 9  3--4

第一轮:

 012345

 964835   比较下标到4即可,a.length=6,j<5(a.length-1-0)就行,0,1,2,3,4,比较5次

for(int j=0;j<a.length-1-0;j++){    用i设置轮数。j设置每轮比较次数。蓝色数字刚好用i代替。

   if(a[j]>a[j+1]){

       int temp=a[j];

       a[j]=a[j+1];

       a[j+1]=temp;

}

}

第二轮:比较4次,j<4(a.length-1-1)

for(int j=0;j<a.length-1-1;j++){

   if(a[j]>a[j+1]){

       int temp=a[j];

       a[j]=a[j+1];

       a[j+1]=temp;

}

}

第三轮:比较3次,j<3(a.length-1-2)

for(int j=0;j<a.length-1-2;j++){

   if(a[j]>a[j+1]){

       int temp=a[j];

       a[j]=a[j+1];

       a[j+1]=temp;

}

}

第四轮:比较2次,j<2(a.length-1-3)

for(int j=0;j<a.length-1-3;j++){

   if(a[j]>a[j+1]){

       int temp=a[j];

       a[j]=a[j+1];

       a[j+1]=temp;

}

}

第五轮:比较1次,j<1(a.length-1-4)

for(int j=0;j<a.length-1-4;j++){

   if(a[j]>a[j+1]){

       int temp=a[j];

       a[j]=a[j+1];

       a[j+1]=temp;

}

}

int[] a={9,6,4,8,3,5}

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]=a[j+1];

       a[j+1]=temp;

}

}

}

选择排序

0 1 2 3 4 5

9,6,4,3,1,2

第一轮 比较5次 964312 两两比较,找到一个最小数,和第1个数交换  

964312  最小数下标为1 9--6

964312  最小数下标为2 6--4

964312  最小数下标为3 4--3

964312  最小数下标为4 3--1

964312  最小数下标为4 1--2

164392

第二轮 比较4次 64392 两两比较,找到一个最小数,和第2个数交换

164392  最小数下标为2 6--4

164392  最小数下标为3 4--3

164392  最小数下标为3 3--9

164392  最小数下标为5 3--2

124396

第三轮 比较3次 4396 两两比较,找到一个最小数,和第3个数交换  

124396 最小数下标为3 4--3

124396 最小数下标为3 3--9

124396 最小数下标为3 3--6

123496

第四轮 比较2次 496 两两比较,找到一个最小数,和第4个数交换  

123496 最小数下标为3 4--9

123496 最小数下标为3 4--6

123496

第五轮 比较1次96 两两比较,找到一个最小数,和第5个数交换   

123496 最小数下标为5 9--6

123469

5轮,i<5 0,1,2,3,4  j<5

1轮,j[now]=0  比5次,0,1,2,3,4,

2轮,j[now]=1  比4次  1,2,3,4

3轮,j[now]=2  比3次  2,3,4

4轮,j[now]=3  比2次  3,4

5轮,j[now]=4  比1次  4

int now;

int should;

for(int i=0;i<a.length-1;i++){

should=i;

now=i;

  for(int j=i+1;j<a.length;j++){

     if(a[j]<a[now]){

       now=j;

}

}

  if(should!=now){

int temp=a[now];

a[now]=a[should];

a[should]=a[now];

}

}

  

插入排序

当前数据与前面的数据比较

0 1 2 3 4 5

4,3,2,5,8,9

1: 3 4 2 5 8 9   43》3 4

2: 3 4 2 5 8 9   3 4 2 》344》334》234

3: 2 3 4 5 8 9   2345》2345

4: 2 3 4 5 8 9   23458》23458

5: 2 3 4 5 8 9   234589》234589

比较5轮

1  比较1次 start=1

2  比较2次 start=2

3  比较3次 start=3

4  比较4次 start=4

5  比较5次 start=5

int insert;

int now;

for(int i=1;i<a.length;i++){

insert=i;

now=a[i];

  for(int j=i-1;j>=0;j--){

   if(a[j]>now){

       a[j+1]=a[j];

       insert=j;

}else{

break;

}

}

  if(insert!=i){

    a[insert]=now;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值