
从上图可知,每次循环,找到数组中最小的那个元素,将它和数组要进行循环的第一个元素交换位置;交换后的数将不再进入下一次循环,比如上述2交换后,下次循环2将不再这次循环中;依此类推。(即初始时假设第一个值为最小值,和后面的值进行比对找出最小值)
双层for循环
[0,len-1][i+1,len]综上所述,有如下代码
- function swap(arr, i, j){
- let temp = arr[i];
- arr[i] = arr[j];
- arr[j] = temp;
- }
- //sort为true时是升序,否则为降序
- function choiceSort(arr,sort){
- let len = arr.length;
- let minIndex = 0;
- for(let i = 0;i< len-1;i++){
- minIndex = i;
- for(let j = i+1;j
- let result = (sort ? arr[j] < arr[minIndex] : arr[j] > arr[minIndex]);
- if(result){
- minIndex = j;
- }
- }
- if(minIndex !== i){
- swap(arr,i,minIndex);
- }
- }
- return arr;
- }
- console.log(choiceSort([4,3,5,3,1],true));
从上面逻辑我们得知时间复杂度都是O(n^2)。