排序算法之直接选择排序

直接选择排序:通过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));

猜你喜欢

转载自www.cnblogs.com/huanqiuxuexiji/p/9163499.html