c++排序函数对二维数组排序_数组排序

前言

熟悉数组和字符之间的转化,可以参考我之前的文章

https://zhuanlan.zhihu.com/p/186438076​zhuanlan.zhihu.com

熟悉十大排序算法

JS几种数组排序及sort的实现

给出以下数组,并进行排序处理

var arr = new Array('1','3','8','2','3','5');

插入法排序

插入法排序,即那数组的后边一项和前面一项对比,如果后面一项小于前面
一项,则将两者位置互换,从数组第2个元素开始对比
Array.prototype.csSort = function() {
    var newarr = this;
    for (let i = 1; i < newarr.length; i++) {
        for (let j = i; j > 0; j--) {
            if (newarr[j] < newarr[j-1]) {
                let pre = newarr[j];
                newarr[j] = newarr[j-1];
                newarr[j-1] = pre;
            };
        };
    };
    return newarr;
}
console.log(arr.csSort().toString());

数组排序

案例:

给出正整数数组 array = [2,1,5,3,8,4,9,5]
请写出一个函数 sort,使得 sort(array) 得到从小到大排好序的数组 [1,2,3,4,5,5,8,9]
新的数组可以是在 array 自身上改的,也可以是完全新开辟的内存。

  • 第一种:使用 JS 内置的 sort API
  • 第二种:不使用 JS 内置的 sort API

sort API方法

array = [2,1,5,3,8,4,9,5];
arr = array.sort();
console.log(arr);

//[1, 2, 3, 4, 5, 5, 8, 9]

6350abd34f4fcc0e9e53f8d7e56a3c5e.png

默认地,sort() 函数按照字符串顺序对值进行排序。

该函数很适合字符串("Apple" 会排在 "Banana" 之前)。

不过,如果数字按照字符串来排序,则 "25" 大于 "100",因为 "2" 大于 "1"。

正因如此,sort() 方法在对数值排序时会产生不正确的结果。

我们通过一个比值函数来修正此问题:

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a - b}); 

//1,5,10,25,40,100

使用相同的技巧对数组进行降序排序:

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return b - a}); 
JavaScript Êý×éÅÅÐò​www.w3school.com.cn js数组排序 - 抱臂柴 - 博客园​www.cnblogs.com JS数组排序:使用reverse()和sort()方法​c.biancheng.net

sort排序:

递归

获取最小值小标
let minIndex = (numbers) =>{
  let index = 0    //提前放入一个数到篮子里
  for(let i=1;i<numbers.length;i++){  //遍历所有数
    if(numbers[i]<numbers[index]){  //当前值与篮子里第一项进行比较:如果小于第一项,则互换位置
      index = i  //重要:把当前i赋值给index
    }
  }
  return index  //返回最小值索引!!(篮子)
}

---------------------------------------------------------------------------------------------
任意长度的数组排序
let sort = (numbers) => {
  if(numbers.length>2){
   let index = minIndex(numbers)
   let min = numbers[index]
   number.splice(index,1)
   return [min],concat(sort(numbers))
  }else{
   return numbers[0]<numbers[1]?numbers:numbers.reverse()
  }
}

0680f916f6123117f724455f70397fed.png

循环

获取最小值下标
let minIndex = (numbers) =>{
  let index = 0    //提前放入一个数到篮子里
  for(let i=1;i<numbers.length;i++){  //遍历所有数
    if(numbers[i]<numbers[index]){  //当前值与篮子里第一项进行比较:如果小于第一项,则互换位置
      index = i  //重要:把当前i赋值给index
    }
  }
  return index  //返回最小值索引!!(篮子)
}

交换代码
let swap = (array,i,j)=>{
  let temp = array[i]
  array[i] = array[j]
  array[j] = temp
}

---------------------------------------------------------------------------------------------

任意长度的数组排序
let sort = (numbers)=>{
  if(numbers.length>2){
    for(let i=0;i<numbers.length-1;i++){
      let index = minIndex(numbers.slice(i))+i 
      swap(numbers,index,i)
    }
  }else{
    return numbers[0]<numbers[1]?numbers:numbers.reverse()
  }
}

6ef475f4c285d51c279d237ce2cdb093.png

反转数组

reverse() 方法反转数组中的元素。

您可以使用它以降序对数组进行排序:

array = [2,1,5,3,8,4,9,5];
arr = array.reverse();
console.log(arr);

//[5, 9, 4, 8, 3, 5, 1, 2]
表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页