实现插入排序

发布于:2025-04-20 ⋅ 阅读:(66) ⋅ 点赞:(0)

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

#include <bits/stdc++.h> 
using namespace std;

const int N = 102; // 定义数组最大长度,略大于题目范围,a[0]用作哨兵位

int main()
{
  int n;
  cin >> n; // 读取要排序的元素个数

  int a[N]; // 声明数组,使用从1开始的下标(a[0]留作哨兵)

  // 读取输入的n个元素,存入数组a中(从下标1开始)
  for (int i = 1; i <= n; i++)
  {
    cin >> a[i];
  }

  // 插入排序的主体逻辑
  for (int i = 2; i <= n; i++) // 从第2个元素开始(因为第1个元素默认已排序)
  {
    if (a[i] < a[i - 1]) // 如果当前元素比前一个小,说明需要插入排序
    {
      a[0] = a[i]; // 将当前元素存入哨兵a[0],用于后续比较和插入
      int j = i - 1; // 从前面已排序的最后一个元素开始往前找插入位置

      // 如果当前比较位置的元素大于待插入元素,就往后移一位
      for (; a[j] > a[0]; j--)
      {
        a[j + 1] = a[j]; // 将a[j]往后移,为插入a[0]腾出空间
      }

      a[j + 1] = a[0]; // 找到正确位置后插入元素
    }
  }

  // 输出排好序的数组
  for (int i = 1; i <= n; i++)
  {
    cout << a[i] << " ";
  }

  return 0;
}

#include <bits/stdc++.h>
using namespace std;

const int N =102;
int main()
{

  int n;
  cin >>n;
  int a[N];
  for(int i=1;i<=n;i++)
  {
    cin >> a[i];
  }

  for(int i=2;i<=n;i++)
  {

    if(a[i]<a[i-1])  // 前面已排升序  a[5] < a[4]
    {
      a[0] = a[i]; // 暂存插入元素   a[0] = a[5]

      int j= i-1; //  j = 4 

      for (;a[j]>a[0];j--)  //  a[4] > a[0]成立 ,条件成立,执行循环体
      {
        a[j+1] = a[j];  // 元素后移   [5]= a[4]

      }//执行完循环体之后,才执行 j-- ,此时j=3

      a[j+1]  = a[0];  // 插入正确位置 假设只有

    }
  }

  for(int i=1;i<=n;i++)
  {
    cout << a[i] <<" ";
  }

  return 0;
}
#include <bits/stdc++.h>
using namespace std;

const int N =102;
int main()
{

  int n;
  cin >>n;
  int a[N];
  for(int i=0;i<n;i++)
  {
    cin >> a[i];
  }

  sort(a,a+n);

  for(int i=0;i<n;i++)
  {
    cout << a[i] <<" ";
  }

  return 0;
}


网站公告

今日签到

点亮在社区的每一天
去签到