冒泡排序
每轮两两比较,必要时交换位置,找出一个最大数,最大数都排到该轮后面
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;
}
}