排序算法学习(插入排序)

1.介绍

   插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴,

   但它的原理应该是最容易理解的了,因为只要打过扑克牌的人都应该能够秒懂。

   插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,

   对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

   插入排序和冒泡排序一样,也有一种优化算法,叫做拆半插入。

 

2.算法步骤

   第一步:将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。

   第二步:从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。

   注:如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。

 

3.JavaScript实现

   function insertionSort(arr) {
       var len = arr.length;
       var preIndex, current;
       for (var i = 1; i < len; i++) {
            preIndex = i - 1;
            current = arr[i];
            while(preIndex >= 0 && arr[preIndex] > current) {
                arr[preIndex+1] = arr[preIndex];
                preIndex--;
            }
           arr[preIndex+1] = current;
        }
       return arr;
    }

    总结:preIndex一次拿到的数据个数,current每次拿到的未排序元素,

               循环判断这个元素小于哪个元素,就把值交换,内循环结束

 

4.Python实现

    def insertionSort(arr):
    for i in range(len(arr)):
          preIndex = i-1
          current = arr[i]
          while preIndex >= 0 and arr[preIndex] > current:
              arr[preIndex+1] = arr[preIndex]
              preIndex-=1
          arr[preIndex+1] = current
     return arr

 

5.Go实现

   func insertionSort(arr []int) []int {
        for i := range arr {
                preIndex := i - 1
                current := arr[i]
                for preIndex >= 0 && arr[preIndex] > current {
                        arr[preIndex+1] = arr[preIndex]
                        preIndex -= 1
                }
                arr[preIndex+1] = current
        }
        return arr
  }

 

6.Java实现

   public class InsertSort implements IArraySort {

        @Override
        public int[] sort(int[] sourceArray) throws Exception {
             // 对 arr 进行拷贝,不改变参数内容
             int[] arr = Arrays.copyOf(sourceArray, sourceArray.length);

             // 从下标为1的元素开始选择合适的位置插入,因为下标为0的只有一个元素,默认是有序的
             for (int i = 1; i < arr.length; i++) {

                  // 记录要插入的数据
                 int tmp = arr[i];

                 // 从已经排序的序列最右边的开始比较,找到比其小的数
                 int j = i;
                 while (j > 0 && tmp < arr[j - 1]) {
                     arr[j] = arr[j - 1];
                     j--;
                  }

                 // 存在比其小的数,插入
                 if (j != i) {
                    arr[j] = tmp;
                 }

             }
          return arr;
       }
   }

 

7.PHP实现

   function insertionSort($arr)
  {
      $len = count($arr);
      for ($i = 1; $i < $len; $i++) {
           $preIndex = $i - 1;
           $current = $arr[$i];
           while($preIndex >= 0 && $arr[$preIndex] > $current) {
               $arr[$preIndex+1] = $arr[$preIndex];
               $preIndex--;
           }
           $arr[$preIndex+1] = $current;
      }
      return $arr;
  }

 

8.C++实现

   void insertion_sort(int arr[],int len){
         for(int i=1;i<len;i++){
                int key=arr[i];
                int j=i-1;
                while((j>=0) && (key<arr[j])){
                        arr[j+1]=arr[j];
                        j--;
                }
                arr[j+1]=key;
        }
  }

 

学习来源:https://www.runoob.com/w3cnote/insertion-sort.html

posted @ 2020-09-03 14:42  小窝蜗  阅读(140)  评论(0编辑  收藏  举报