直接选择排序:通过n-1轮外层循环排序,第 i 轮排序都会有一个n-i-1的内层循环,每次内层循环从无序序列中取得最大值或最小值的下标,通过两两比较、不交换的方式(内层循环不进行元素移动,进行最小值或最大值下标的改变),当每一轮外层循环结束时,通过最大值或最小值的下标,将最大值或最小值移动到有序序列。最后一个数默认进入有序序列,排序结束。
冒泡排序和直接选择排序:都是通过在无序序列中获取最大值或最小值,移动到有序序列里,采用不同方式移动的排序。
1 //直接选择排序 2 3 const NumberArr = [1, 3, 1, 6, 9, 8, 6, 44, 3, 67, 56, 12, 3]; 4 5 /** 6 * 升幂排序 7 * @param {*} arr 8 */ 9 function direct_select_asc(arr) { 10 for (let i = 0; i < arr.length - 1; i++) { 11 let min = i; 12 for (let j = i + 1; j < arr.length; j++) { 13 if (arr[min] > arr[j]) { 14 min = j; 15 } 16 } 17 if (min !== i) { 18 let temp = arr[i]; 19 arr[i] = arr[min]; 20 arr[min] = temp; 21 } 22 } 23 return arr; 24 } 25 26 /** 27 * 降幂排序 28 * @param {*} arr 29 */ 30 function direct_select_desc(arr) { 31 for (let i = 0; i < arr.length - 1; i++) { 32 let max = i; 33 for (let j = i + 1; j < arr.length; j++) { 34 if (arr[max] < arr[j]) { 35 max = j; 36 } 37 } 38 if (max !== i) { 39 let temp = arr[i]; 40 arr[i] = arr[max]; 41 arr[max] = temp; 42 } 43 } 44 return arr; 45 } 46 47 console.log(direct_select_asc(NumberArr));