1.题目:
给定一个数组,编写代码让其从小到大排序或从大到小排序(这里以从小到大为例) 。
2.思路:
取数组第一个数和索引,遍历数组,遇到比他小的则调换位置,将这个数置于数组第一位,然后用新的这个数继续遍历数组,以此将数组中最小数放于数组第一位;然后取数组第二个数和索引,使用相同方法获得第二小的数放在第二位;然后继续取数获得第三、第四。。。直到最大的一个数。
3.调换方法:
一般情况下设置中间变量临时存值
temp=a
a=b
b=temp
但是有时也会要求不能产生中间变量(加减法---容易丢失值)
a=a+b
b=a-b
a=a-b
(这里数组全为整数,以加减法为例)
4. 编写代码:
var arr=[5,6,2,4,7,8,1,11,3]
for(var i=0;i<9;i++){
for(var j=i+1;j<9;j++){
if(arr[j]<arr[i]){
arr[j]=arr[j]+arr[i]
arr[i]=arr[j]-arr[i]
arr[j]=arr[j]-arr[i]
}
}
}
console.log(arr);
输出数据:1,2,3,4,5,6,7,8,11
一般到这里目的已经完成了,我们优化一下让代码更具有通用性,将循环最大值设为数组长度就行
for(var i=0;i<arr.length;i++){
for(var j=i+1;j<arr.length;j++){
然后我们在继续优化一点,省略掉重复无意义的遍历就可以得到
var arr=[31,9,26,7,66,75,34,21]
for(j=0;j<arr.length;j++){
for(i=0;i<arr.length-j-1;i++){
if (arr[i]>arr[i+1]) {
arr[i]=arr[i]+arr[i+1]
arr[i+1]=arr[i]-arr[i+1]
arr[i]=arr[i]-arr[i+1]
}
}
}
console.log(arr);