选择排序
选择排序方法:
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);