首页 > 其他分享 >插入排序

插入排序

时间:2024-05-06 20:55:27浏览次数:20  
标签:下标 int 插入排序 元素 插入 序列 buf

插入排序简单来说 假设数组第一个元素为一个有序序列 然后将后面的无序序列依次与第一个元素比较 更具大小决定待插入元素插入的位置。
、、、
// 插入排序 是吧无序序列中的元素依次插入到有序序列中,一般是从有序序列的尾部开始比较
void InsertSort(int buf[10], int bufsize)
{
int temp = 0; // 用于备份当前待插入元素的值
int current_prev = 0; // 备份待插入元素的下标(2)

// 可以假设把数组中的第一个元素座位有序序列的元素,剩下的元素作为无序序列
for (int i = 1; i < bufsize; ++i)    //(1)
{
    temp = buf[i]; // 备份当前待插入元素的值
    // 把当前待插入元素和有序序列中的元素依次进行比较,从有序序列尾部开始
    for (int j = i - 1; i >= 0; j--)
    {
        if (temp < buf[j]) // 当前插入元素的值 小于待插入元素的直接前驱元素的值
        {
            current_prev = j;    // 备份当前待插入元素的直接前驱的下标(3)
            buf[j + i] = buf[i]; // 后移
        }
        else
        {
            current_prev = j + i;
            break;
        }
    }
    // 把待插入元素插入指定位置
    buf[current_prev] = temp;
}

}、、、
本题需要思考的两个问题
1.为何 (1)int i 从1 开始i++
答:已经假设了第一个下标为0 的元素为一个有序数列 没必要自己和自己再比较
2.为何 (2)(3)要对待插入元素的下标进行备份?
答:如图这种情况


会发现插入之前 i=1 j=0,当j进行j--时 j=-1 ,不满足第二个for循环,下标为负数没有意义 ,知道temp=3但是不知道它插入位置的下标。
此时在第二个for循环中备份 j=0当前下标的地址[current_prev] temp就有目标元素下标进行插入 ,j等于-1则不进入第2个for循环 。****

标签:下标,int,插入排序,元素,插入,序列,buf
From: https://www.cnblogs.com/fzhyy/p/18175925

相关文章

  • 排序3-插入排序
    排序3-插入排序插入排序把排序对象分成已排序和未排序两个部分,每次选取未排序部分的首元素,将它插入已排序部分的合适部分插入排序(正序)//插入排序voidinsertSort(intarr[],intlength){intj;for(inti=1;i<length;i++){//i是无序部分首元素的下标......
  • NzN的数据结构--插入排序
         排序排序我要Disney,今天我们先来看看经典排序算法里的插入排序,先三连后看才是好习惯!!!目录一、排序的概念及应用1.排序的概念2.排序的应用3.常见的排序算法二、插入排序1.基本思想2.直接插入排序3.希尔排序(缩小增量排序)一、排序的概念及应用1.......
  • 排序之插入排序和交换排序
    排序的分类内部排序插入排序直接插入排序折半插入排序希尔排序交换排序冒泡排序快速排序选择排序简单选择排序堆排序⭐归并排序基数排序外部排序插入排序直接插入排序在待排序的元素序列基本有序的前提下,直接插入排序是效率最高的排序算法利用直接插入排序的......
  • 插入排序的基本实现【数据结构与算法—TypeScript 实现】
    笔记整理自coderwhy『TypeScript高阶数据结构与算法』课程概念本质:将数列分为已排序和未排序,将未排序中的元素插入到已排序中的合适位置特性复杂度分析时间复杂度:最好情况:O(n),有序序列最坏情况:O(n^2),倒序序列平均情况:O(n^2),随机数列空间复杂度:O(n),原地排序使......
  • 什么是插入排序
    一、什么是插入排序插入排序是一种最简单的排序方法,其基本思想是将一个记录插入到已经排好序的有序表中,从而形成一个新的、记录数增1的有序表。其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素进行遍历,内层循环对当前元素前面有序表进行待插入位置查找,并进行移......
  • 常见的排序算法——插入排序(二)
    本文记述了插入排序微小改进的基本思想和一份参考实现代码,并在说明了算法的性能后用实验进行了验证。◆思想内存中的数据交换是昂贵的操作,此改进实现了不需要交换的插入排序。将第一个元素之后的所有元素作为待排序范围,将前面的所有元素作为已排序范围。通过一一比较,逐个将已......
  • 三种算法实例(二分查找算法、插入排序算法、贪心算法)
    当我们听到“算法”这个词时,很自然地会想到数学。然而实际上,许多算法并不涉及复杂数学,而是更多地依赖基本逻辑,这些逻辑在我们的日常生活中处处可见。在正式探讨算法之前,有一个有趣的事实值得分享:你已经在不知不觉中学会了许多算法,并习惯将它们应用到日常生活中了。下面我将举......
  • 常见的排序算法——插入排序
    本文记述了插入排序的基本思想和一份参考实现代码,并在说明了算法的性能后用实验进行了验证。◆思想将第一个元素之后的所有元素作为待排序范围,将前面的所有元素作为已排序范围。通过一一比较,逐个交换已排序范围内比第二个元素大的所有元素,使第二个元素被插入到了正确的位置。然......
  • 【数据结构与算法】:直接插入排序和希尔排序
    1.排序的概念及其意义1.1排序的概念所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。1.2排序的稳定性假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[......
  • 蓝桥杯备考随手记: 常用的三种排序算法(冒泡排序、插入排序、选择排序)
    1.冒泡排序(BubbleSort)冒泡排序是一种简单直观的排序算法,在待排序序列中不断地交换相邻两个元素的位置,通过多次遍历,将最大(或最小)的元素逐渐向右(或左)移动到正确的位置,直到整个序列有序。冒泡排序的基本思想如下:从序列的第一个元素开始,比较相邻两个元素的大小。如果前一个元......