当前位置: 首页 > article >正文

查找与排序-插入排序

排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。用一张图概括:


插入排序是一种简单直观的排序算法,其基本思想是将未排序的元素逐个插入到已排序的部分中,直到所有元素都被插入到合适的位置为止。

算法步骤:

  1. 从第一个元素开始,该元素可以认为已经被排序。
  2. 取出下一个元素,在已经排序的元素序列中从后向前扫描。
  3. 如果该元素(已排序)大于新元素,将该元素移到下一位置。
  4. 重复步骤3,直到找到已排序的元素小于或等于新元素的位置。
  5. 将新元素插入到该位置后。
  6. 重复步骤2~5,直到所有元素都被排序。


假设我们有以下待排序的数组:[5, 3, 8, 6, 2]

  1. 初始状态:[5, 3, 8, 6, 2]
  2. 第一轮:将3插入到已排序部分[5]中,得到[3, 5, 8, 6, 2]
  3. 第二轮:将8插入到已排序部分[3, 5]中,得到[3, 5, 8, 6, 2]
  4. 第三轮:将6插入到已排序部分[3, 5, 8]中,得到[3, 5, 6, 8, 2]
  5. 第四轮:将2插入到已排序部分[3, 5, 6, 8]中,得到[2, 3, 5, 6, 8]

最终,数组变为有序状态:[2, 3, 5, 6, 8]


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

http://www.kler.cn/news/334771.html

相关文章:

  • 新闻推荐系统:Spring Boot与大数据
  • 计算机网络——http和web
  • 2024年最新大模型LLM学习路径全解析!看完你就是LLM大师
  • 解决跨域问题
  • C++ | Leetcode C++题解之第455题分发饼干
  • 【算法】哈希映射(C/C++)
  • Kubernetes-使用不同主机终端访问k8s 集群。
  • windows上安装python环境
  • CSS元素堆叠
  • Redis:list类型
  • ThinkPHP5基础入门
  • STM32(五)GPIO输入硬件电路及C语言知识复习
  • MATLAB guide选择图片和全局变量使用
  • 【Android】CarWatchDog I/O监控服务
  • 方法重写与多态
  • 速盾:游戏加速下载可以用cdn吗?
  • 互联网Java工程师面试题及答案整理(2024年最新版)
  • AI正悄然地影响着企业数字化转型
  • JUC高并发编程4:集合的线程安全
  • 30min 的OpenCV learning Note