排序的原理都是一样的,都是经过length-1轮排序,每一轮拿到一个最大值或者最小值,放到数组的最前面或者最后面 ,然后剩下的值进入下一轮排序。
排序一个数组s=[2,6,9,3,4,8,5],length=s.length
冒泡排序
第一轮
s[0]和s[1]比较,如果是s[0]<s[1],两者交换位置;s[1]和[2]比较,如果s[1]<s[2],两者交换位置;......s[length-2]和s[length-1]比较,如果s[length-2]<s[length-1],两者交换位置。这样就拿到s[0]...s[length-1]的最大值,并放到s[length-1]的位置。
第二轮
s[0]和s[1]比较,如果是s[0]<s[1],两者交换位置;s[1]和[2]比较,如果s[1]<s[2],两者交换位置;......s[length-3]和s[length-2]比较,如果s[length-3]<s[length-2],两者交换位置。这样就拿到s[0]...s[length-2]的最大值,并放到s[length-2]的位置。
.....
第lengh-1轮
s[0]和s[1]比较,如果是s[0]<s[1],两者交换位置,这样就拿到s[0]到s[1]的最大值,并放到s[1]的位置。
这样经过length-1轮,我们就排序完成了,实现代码
for(int i=0;i<is.length-1;i++) {
for(int j=0;j<is.length-1-i;j++) {
if(is[j]>is[j+1]) {
swap(j,j+1);//交换顺序
}
}
}
选择排序
第一轮
s[0]和s[1]比较,如果是s[0]>s[1],两者交换位置;s[0]和[2]比较,如果s[0]>s[2],两者交换位置;......s[0]和s[length-1]比较,如果s[0]>s[length-1],两者交换位置。这样就拿到s[0]...s[length-1]的最小值,并放到s[0]的位置。
第二轮
s[1]和s[2]比较,如果是s[1]>s[2],两者交换位置;s[1]和[3]比较,如果s[1]>s[3],两者交换位置;......s[1]和s[length-1]比较,如果s[1]>s[length-1],两者交换位置。这样就拿到s[1]...s[length-1]的最小值,并放到s[1]的位置。
.....
第lengh-1轮
s[length-2]和s[length-1]比较,如果是s[length-2]>s[length-1],两者交换位置,这样就拿到了s[length-2]到s[length-1]的最小值,并放到s[length-2]的位置。
这样经过length-1轮,我们就排序完成了,实现代码
for(int i=0;i<s.length-1;i++) {
for(int j=i;j<s.length;j++) {
if(s[i]>s[j]) {
swap(i,j);//交换顺序
}
}
}