选择排序

92 阅读2分钟

选择排序

选择排序方法:

1.假定最小的值是第一个 记录最小值的索引 ;

  1. 用最小值和其他的数来比较,如果其他的数有比这个假定的最小值还小,那么就记录其他数所在的索引,还需要互换2个值的位置。
var arr = [5,4,6,2];
var minIndex = 0;//假设最小值的索引
var min = arr[minIndex]; //假设的最小值 
//用最小值和其他的数来比较
for(var i=1;i<arr.length;i++){
            if(arr[i]<min){
                    min=arr[i];
                    minIndex=i;
        }
}
console.log("最小值",min,"最小值的索引",minIndex);//最小值 2 最小值的索引 3

// 若把假设的值和最小值互换位置

var temp =arr[0];
arr[0] =  arr[minIndex];
arr[minIndex] = temp;
console.log(arr);//(4)[2,4,6,5]
// 互换完成之后,最小值一定是在最左边

整理下面的思路:第一次把最小值放最左边了,然后比除去第一项的剩下的值得最小值,依次类推

  // 第一次:把最小放在了第一位 j=0
        var arr = [5,4,6,2];
        var minIndex = 0;  //假设最小值的索引
        var min = arr[minIndex]; //假设的最小值 
        for (var i = 1; i < arr.length; i++) {
            if (arr[i] < min) {
                min = arr[i];
                minIndex = i;
            }
        }
        var temp = arr[0];
        arr[0] = arr[minIndex];
        arr[minIndex] = temp;
        console.log(arr);  //(4)[2,4,6,5]
 // 第二次:把最小放在了第二位 j=1
        var arr = [5,4,6,2];
        // var arr =[4,6,5]
        var minIndex = 1;  //假设最小值的索引
        var min = arr[minIndex]; //假设的最小值 
        for (var i = 2; i < arr.length; i++) {
            if (arr[i] < min) {
                min = arr[i];
                minIndex = i;
            }
        }
        var temp = arr[1];
        arr[1] = arr[minIndex];
        arr[minIndex] = temp;
        console.log(arr);  //(4)[2,4,6,5]
 // 第三次:把最小放在了第三位 j=2
        var arr = [5,4,6,2];
         // var arr =[6,5]
        var minIndex = 2;  //假设最小值的索引
        var min = arr[minIndex]; //假设的最小值 
        for (var i = 3; i < arr.length; i++) {
            if (arr[i] < min) {
                min = arr[i];
                minIndex = i;
            }
        }
        var temp = arr[2];
        arr[2] = arr[minIndex];
        arr[minIndex] = temp;
        console.log(arr);  //(4)[2,4,5,6]

循环

var arr = [5,4,6,2];
for (var j = 0; j < arr.length - 1; j++) {
            var minIndex = j;  //假设最小值的索引
            var min = arr[minIndex]; //假设的最小值 
            for (var i = j+1; i < arr.length; i++) {
                if (arr[i] < min) {
                    min = arr[i];
                    minIndex = i;
     }
}
       var temp = arr[j];
       arr[j] = arr[minIndex];
       arr[minIndex] = temp;
           
}
console.log(arr);

进一步优化

var arr = [5,4,6,2];
for (var j = 0; j < arr.length - 1; j++) {
            var minIndex = j;  //假设最小值的索引
            var min = arr[minIndex]; //假设的最小值 
            for (var i = j+1; i < arr.length; i++) {
                if (arr[i] < min) {
                    min = arr[i];
                    minIndex = i;
                }
            }
// 一个优化 :找到的最小索引值 和当前假设的最小索引值是一样了就没必要互换2个值了
            if(j!=minIndex){
                var temp = arr[j];
                arr[j] = arr[minIndex];
                arr[minIndex] = temp;
         }
}
console.log(arr);