直接插入

2024-09-07 20:38
文章标签 直接插入

本文主要是介绍直接插入,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

思想:对已排好序的数组从头开始扫一遍,以升序为例,若遇到插入的数k大于等于a[i]并且小于等于a[i+1],跳出扫的循环,
      新一次循环从i+1开始扫起,判定条件修改为要小于n+1(因为相当于数组多了个元素),循环体里实现数值交换


解题代码:
#include <stdio.h>
#define N 100000
void Input(int a[],int n)
{
    int i;
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
}

void Maopao(int a[],int n)
{
    int i,j,temp;
    for(i=0;i<n-1;i++)
    {
        for(j=1;j<n;j++)
        {
            if(a[i]>a[j])    //升序选择
            {
                temp=a[i];
                a[i]=a[j];
                a[j]=temp;
            }
        }
    }
}

void Charu(int a[],int n,int k)    //直接插入
{
    int i,j,temp;
    for(i=0;i<n;i++)
    {
        if(a[i]<=k&&a[i+1]>=k)
        {
            break;
        }
    }
    for(j=i+1;j<n+1;j++)
    {
        temp=a[j];
        a[j]=k;
        k=temp;
    }
}

void Output(int a[],int n)
{
    int i;
    for(i=0;i<n;i++)
        printf("%d ",a[i]);
}

int main()
{
    int a[N],n,k;
    printf("请输入数据个数:\n");
    scanf("%d",&n);
    Input(a,n);
    Maopao(a,n);
    Output(a,n);
    printf("\n请输入插入的数据:\n");
    scanf("%d",&k);
    Charu(a,n,k);

    Output(a,n+1);
    return 0;
}

这篇关于直接插入的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1146107

相关文章

【数据结构】排序(直接插入、折半插入、希尔排序、快排、冒泡、选择、堆排序、归并排序、基数排序)

目录 排序一、插入排序1.直接插入排序2.折半插入排序3.希尔排序 二、交换排序1.快速排序2.冒泡排序 三、选择排序1. 简单选择排序2. 堆排序3. 树排序 四、归并排序(2-路归并排序)五、基数排序1. 桶排序(适合元素关键字值集合并不大)2. 基数排序基数排序的基本原理基数排序的实现步骤基数排序的代码实现 排序 图片取自博客园 链接: 各种排序算法时间复杂度

冒泡、直接插入、快排、归并排序算法的性能测试

这里我写了一个测试demo,测试前面的冒泡排序、直接插入排序算法、快速排序算法、二路归并排序算法的性能: package leetcode.Algorithm;import java.util.Random;/*** Created by louyuting on 17/2/6.*/public class ClientTest {private static final int N = 8

排序算法---直接插入

思想 直接插入排序基本思想:假设待排序的记录存放在数组R[1..n]中。初始时,R[1]自成1个有序区,无序区为R[2..n]。从i=2起直至i=n为止,依次将R[i]插入当前的有序区R[1..i-1]中,生成含n个记录的有序区。 例子 通过下面一个排序的例子,来帮助我们理解直接插入排序的思想。我们假设下面无序的序列开头数字为3为一个有序的数列,依次将1,6,4,8,2,9,5,7插入进

mysql使用shell脚本直接插入数据到指定库

写了一个脚本deptimport.sh #!/bin/shif [ $# -eq 2 ] ; then `mysql -uroot -p123456 -D$1 < $2`; exit;fi 使用方式sh deptimport.sh eseal_ms_jsq /tmp/caojingzhen_jinshanweizhen_dept.sql eseal_ms_jsq为mysql数据库其中

插入排序(直接插入+希尔排序)

直接插入排序是将元素按顺序插入已经排好序的序列中。对于待插入的元素,如果比最后一个元素还大,则不用处理。否则,从后边元素开始比较,并顺次后移,直到碰到元素小于或者等于该元素。 设置第一个元素位置为哨兵,用来存放待插入元素。 #include <iostream>#include <cstring>#include <cstdlib>using namespace std;#define

(转)图解排序算法(一)之3种简单排序(选择,冒泡,直接插入)

图解排序算法(一)之3种简单排序(选择,冒泡,直接插入)   排序是数据处理中十分常见且核心的操作,虽说实际项目开发中很小几率会需要我们手动实现,毕竟每种语言的类库中都有n多种关于排序算法的实现。但是了解这些精妙的思想对我们还是大有裨益的。本文简单温习下最基础的三类算法:选择,冒泡,插入。   先定义个交换数组元素的函数,供排序时调用 /*** 交换数组元素* @param

选择算法之直接插入算法

直接插入算法:这个算法我之前在另一本书看过,当时算是懂了,今天再看又看了好久,才觉得温故而知新这句话的重要。 算法思想: 一次遍历数组元素,发现有不符合顺序排列的元素就要把它插入到应该的位置,其他元素后移,保证队列顺序,遍历结束时数组的所有点就会完成排序。 算法实现: 我们假设使用数组来存储一组数列,通过直接插入算法进行选择。 我们也是先通过一个大循环在最外部,这个大循环来遍历每个点以完

JAVA 插入排序(直接插入)

public class Test {static void Insert(int a[]){int j;for (int i = 1; i < a.length; i++) {//把第一个数作为基点,后面的数都和它比较int temp=a[i];j=i;while (j>0&&(a[j-1]>=temp)) { a[j]=a[j-1];--j; }a[j]=temp;System.out