假如有几个数字 int score[] = {67, 69, 75, 88}; 按照从大到小排序。
有2种思路:
第一种思路:score[j] 和 score[j+1] 比较,如果前者比后者小,把前者和后者调换顺序,两两调换后一轮下来,最小的会被排到最后去。
每一轮j都从0开始,当i轮排序,就有最后面的i个数字因为他是最小的,所以后面的每轮都不用理他了,也就是 score.length-1-i 往后的数不用管了,如上,第一轮有4个数字 i为0 ,那么score.length-1-i 为3,也就是下标是3以后的可以不用管,3往后没有数字,所以第一轮所有的数字都要参加比较,第二轮i=1,score.length-1-i 为2 也就是说 下标2后面的 下标为3的数字不用比了,因为两两比较厚,67会到 score[3],实现代码如下:
var a = [2,3,4,5,9,8,6];
function sort(a){
var len = a.length - 1,
temp;
for(var i = 0; i < len; i++){
for(var j = 0; j < len - i; j++){
if(a[j] < a[j+1]){
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
}
sort(a);
第二种思路:用 88 和 75 比较,再和69比较,再和 67 比较,发现88是最大的,把他排到第一位;然后 i=1,也就是第二轮,就不用看下标为 0 的 88 了,因为他是老大,然后接着比较。实现代码如下:
var a = [1,2,3,4,5,6,9,8,6];
function sort(a){
for(var i=0,len1 = a.length - 1;i<len1;i++){
for(var j = a.length - 2;j>=i;j--){
if(a[j]<a[j+1]){
var temp = a[j];
a[j] = a[j+1];
a[j+1]=temp;
}
}
}
return a;
}
sort(a)
要理解j = a.length - 2 和 j >= i。