冒泡排序
第一个循环
如果是从小到大排序数组长度n
第一循环得到数组最后位置(正数下标n-1)是最大。
第二次循环是数组的倒数第二个(正数下标n-2)现有最大
...
第n-1次循环的时候到了第(正数下标n-(n-1)=1)最大
那么问题来了下标为1的比0的大,那么下标0的还要排吗??
显然由上可以知道
第一个for循环了共n-1次
现在对上面的第一次循环得到数组最后的位置是最大的进行细化,假如数组的最后个下标m=(n-1)
假如:下标0的数是最大的,有
下标0个和
下标
1个进行比较,最大数到
下标
1位置上,比较了1次
下标1个和
下标2个进行比较,最大数到
下标2位置上 ,比较了2次
....
当下标m-1和
下标m进行比较,最大数到了m位置上,比较了m次(n-1)
因此第一个循环的最后的比较次数是n-1(n- 一)
第二次循环的数组比较的次数是n-2(n-二)
....
第n-1次循环的数组比较的次数是1(n-(n-1))
所以第二个for循环了n-上面的循环的次数
现在给出完整的例子
public
static
byte
[] sortInt(){
String
str
=
"196851432134"
;
byte
[]
bytes
=
str
.getBytes();
for
(
int
i
= 1;
i
<
bytes
.
length
;
i
++) {
for
(
int
j
= 0;
j
<
bytes
.
length
-
i
;
j
++) {
if
(
bytes
[
j
]<
bytes
[
j
+1]) {
byte
temp
=
bytes
[
j
+1];
bytes
[
j
+1]=
bytes
[
j
];
bytes
[
j
]=
temp
;
}
}
}
return
bytes
;
}
直接选择排序
第一次循.....
第二次循环...
如上
共循环了n-1次
第一次循环细化,
把下标为0的假设为最大值,和剩下的值进行比较n-1进行比较
即是
public
static
byte
[] showString(){
String
str
=
"865651353"
;
byte
[]
bytes
=
str
.getBytes();
for
(
int
i
= 1;
i
<
bytes
.
length
;
i
++) {
int
index
=0;
for
(
int
j
= 1;
j
<=
bytes
.
length
-
i
;
j
++) {
if
(
bytes
[
j
]>
bytes
[
index
]) {
index
=
j
;
}
}
//经过上面的排序后index是下标最大的值的下标
byte
temp
=
bytes
[
bytes
.
length
-
i
];
bytes
[
bytes
.
length
-
i
] =
bytes
[
index
];
bytes
[
index
]=
temp
;
}
return
bytes
;
}
写给将来的自己,希望自己走的更远!!!!