排序算法

(可以不用看我的文章,直接读以下链接,写的很好。我只是做个笔记,唯一的区别是代码实现部分是我用JS写的,不一定完善)
参考链接: https://www.cnblogs.com/onepixel/articles/7674659.html

十种最常见的排序算法大概可以分成两大类

  • 比较类排序,通过比较来决定元素之间的相对顺序,由于其时间复杂度不能突破O(nlogn),也成为非线性时间比较类排序
  • 非比较类排序:不通过比较来决定元素之间的次序,可以突破比较类排序的时间下界,以线性的时间运行,也称为线性时间非比较类排序、

冒泡排序(Bubble Sort)

重复走访需要排序的数列,一次比较两个元素,如果顺序错误就把这两个交换过来,直到没有需要排序的内容。最小的元素最终会慢慢冒泡浮到顶端。

算法描述
  • 从第一个开始比较相邻元素,如果后一个比前一个大,就交换两者顺序。
  • 这样最后一个肯定是全场最大的元素了,就不用访问最后一个了
  • 重复以上步骤,直到没有需要交换的元素
    代码实现:
//  冒泡排序
function bubble(array = []){
  if(array.length>1){
    let count = 0;
    for(let length = array.length-2; length>=0; length--){
      count = 0;
      for(let i=0; i<=length;i++){
        if(array[i]>array[i+1]){
          const temp = array[i];
          array[i] = array[i+1];
          array[i+1] = temp;
          count++;
        }
      }
      if(count === 0) break;
    }
  }
  return array;
}

选择排序 (Selection Sort)

首先在未排序的序列中找到最小的元素,放在序列的起始位置,然后再重复从剩余的未排序序列中找到最小元素,插入已排序序列的末尾,直到所有元素排序完成。

// 选择排序
function selection(array = []){
  if(array.length>1){ 
    for(let i = 0; i<array.length-1;i++){
      let minIndex = i;
      for(let j = i+1; j<array.length;j++){
        if(array[j]<array[minIndex]){
          minIndex = j;
        }
      }
      if(minIndex!==i){
        const temp = array[i];
        array[i] = array[minIndex];
        array[minIndex] = temp;
      }
    }
  }
  return array;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。