常见的几种排序算法:直接插入、快速、冒泡、堆排序、归并排序

1、排序的分类可以简单分为以下几种

  • 插入排序: 直接插入排序( 希尔排序 不常用,本文不作介绍)
  • 交换排序: 快速排序、冒泡排序
  • 选择排序: 堆排序( 简单选择排序 不常用,本文不作介绍)
  • 归并排序: 二路归并排序

2、各种排序思路及算法实现

(1) 直接插入排序:我们可以想象一下玩扑克的时候,我们放置扑克牌数的方法: 先取到第一张牌放在第一位置,随后每次取牌放到比它小和比它大的数字之间,如果相等就紧跟其后(不要考虑特殊牌面,毕竟只是举个~),如此循环,直到取完全部牌

思路: 每次将一个待排序的元素,按照其关键码插入到一个有序序列中,初始有序序列可以为待排序元素的第一个值,且当时只有一个值(一定为有序序列)

js实现:

  const data = [ 5, 3, 9, 20, 1, 8, 10, 7, 6, 4, 5, 12];
  const insertSort = (data) => {
   
  	if (data.length <= 1){
   
	  return data
	 }
    let temp; //用于存储需要插入的数据
    //注意i从1开始,因为以j=i-1为基准数
    for(let i = 1; i < data.length; i++){
   
      temp=data[i];
      // 因为前i-1个数都是从小到大的有序序列,只要当前比较的数(data[j-1])比temp大,就把这个数后移一位,否则直接在j+1的位置上插入待排序元素
      for(var j = i-1; j >= 0 && data[j] > temp; j--){
    
        data[j+1]=data[j];
      }
      data[j+1]=temp;
    }
     return data
  };
  console.log(insertSort(data));
//结果打印值: (12) [1, 3, 4, 5, 5, 6, 7, 8, 9, 10, 12, 20]

(2) 快速排序

思路: 选择数据中的一个值作为中间值(一般取首、中、尾的值),再对数据(此时已经去掉中间值)循环;小于或等于中间值的放在左边、大于或等于中间值的放在右边;再分别对左、右两份数据排序(递归),最终拼接成有序数据

js实现

  const data = [ 5, 3, 9, 20, 1, 8, 10, 7, 6, 

你可能感兴趣的:(learn,算法,排序算法)