// 选择排序
// 核心思路:
// 从第一个单元开始
// 默认当前单元是最小值
// 存储当前单元的索引下标
// 通过索引下标,获取数据,跟之后的每一个单元的数据进行比较
// 如果之后的单元存储的数据是较小值,那么就存储这个单元的索引下标
// 循环一次之后,变量中存储的是当前参与循环的所有单元,存储最小值的索引下标
// 如果这个索引下标,不是,原始的索引下标,就执行交换存储数据的操作
// 完成上述操作,会比较出一个最小值在起始位置
// 多次循环完成整个数组的排序
// 存储索引,通过索引调用数据,比较数据,存储索引,最终判断索引,交换数据
// 优化点 :
// 1, 如果数组有 n 个单元需要 比较排序,外层循环只要执行n-1次就可以
// 2, 如果当前循环是从 i 索引开始 实际比较 从 i+1 开始和 i 比较
// 每次选择一个最小值,存储在数组的起始位置
var arr = [876,231,4,3,1765,7658,3,3213,2,1323];
for(var i = 0 ; i <= arr.length-1-1 ; i++){
// 定义一个变量,存储每次参与循环,起始单元的索引下标
// 第一次,没有比较出任何最小值,从第一个单元也就是索引 0 开始循环 , 默认索引0位置存储的是最小值
// 第二次,已经比较出第一个最小值,存储在索引0位置,循环是从索引1开始,默认索引1位置存储的是最小值
// 第三次,已经比较出两个最小值,存储在索引0,1位置,循环是从索引2开始,默认索引2位置存储的是最小值
var min = i;
// 从当前循环起始单元的下一个位置,开始循环,也就是 i+1
// 循环至最后一个单元
for(var j = i+1 ; j <= arr.length-1 ; j++){
// 如果 变量中存储的索引,获取的数据
// 比 当前 循环到索引 存储的数据大
// 变量 存储 当前 位置的索引下标
if(arr[min] > arr[j]){
min = j;
}
}
// 内层循环结束,变量中存储本次参与循环的所有单元中,最小值所在的索引下标
// 变量中存储的索引下标,如果不是 起始的索引下标
// 交换两个索引下标 min变量中存储的索引下标 和 起始的索引下标 i 对应的数据数值
if(min != i){
var num = arr[min];
arr[min] = arr[i];
arr[i] = num;
}
}