【算法】排序——直接排序

news/2024/7/2 23:13:35

内部排序的全部过程都是在内存中进行的。按排序策略的不同可以将内部排序划分为直接插入排序、冒泡排序、简单选择排序、希尔排序、快速排序、堆排序、归并排序、基数排序等。其中前三种排序方法属于简单的排序方法,其特点是排序过程直观、易于理解和实现,都属于稳定的排序方法,但效率较低;其他几种方法则称为先进的排序方法,算法原理相对复杂,不稳定,但效率较高。

直接插入排序

(1)直接插入排序的基本思想是把新的未排序的元素逐个插入已排序的有序表种。直接插入排序算法可以借助减治法的减一技术进行设计。

(2)假设待排序序列中有k个元素(1<=k<=N-2)已经按照关键字值递增顺序排列,将一个未排序的元素list[i](1<=i<=N-1)直接插入适当的位置。整个排序过程进行N-1趟插入,即首先从右向左顺序搜索表中已排序的序列,直到找到一个元素list[j-1](1<=j-1<=k-1)的关键字值比list[i]的关键字值小;将已排序序列中比list[i]的关键字值大的元素list[j],list[i+1],……,list[k]依次在线性表中后移一个位置;将元素list[i]插入表中的j的位置上成为元素list[j]。 

(3)直接插入排序算法

void insertSort(int list[],int n){
    int i,j;
    for(i=2;i<=n;i++){
        list[0]=list[i];
        j=i-1;
        while(j>0&&list[0]<list[j]){
            list[j+1]=list[j];
            --j;
        }
        list[j+1]=list[0];
    }
}  

(4)完整程序 

#include<stdio.h>
#define N 20
int list[N+1];
void insertSort(int list[],int n){
    int i,j;
    for(i=2;i<=n;i++){
        list[0]=list[i];
        j=i-1;
        while(j>0&&list[0]<list[j]){
            list[j+1]=list[j];
            j--;
        }
        list[j+1]=list[0];
    }
}
int main(){
    int i,n;
    scanf("%d",&n);
    for(i=1;i<=n;i++){
        scanf("%d",&list[i]);
    }
    insertSort(list,n);
    for(i=1;i<=n;i++){
        printf("%d ",list[i]);
    } 
    return 0;


http://lihuaxi.xjx100.cn/news/307399.html

相关文章

Http协议和Https协议

Http是不安全的&#xff0c;你的数据容易被黑客拦截&#xff0c;篡改&#xff0c;攻击 https要求对数据加密&#xff08;不能明文传输&#xff09;, 用抓包工具抓http请求&#xff0c;抓出来的都是明文的&#xff0c;你能看得懂的&#xff0c;抓https请求&#xff0c;抓出来的…

实战-COVID-19-KSH(html+ python +django +爬虫 +pyecharts 实时疫情动态)内附MySQL详细安装配置教程

GitHub代码 Windows10 python3.7 一、MySQL配置 1.官网下载地址 2.配置初始化文件my.ini 解压后在根目录下创建my.ini文件&#xff08;建立.txt-修改扩展名为.int即可&#xff09; 打开my.ini文件&#xff0c;输入以下内容&#xff08;注意需要改动2处&#xff09;&#x…

Arduino开发实例-DIY风速测量及显示

DIY风速测量及显示 1、应用介绍 本次实例将使用一款具有 NPN 脉冲输出的数字风速计传感器。 NPN脉冲输出风速计效果好,性价比高。另外它仅在 5V 电源下工作。 在本次实例中,将此风速计传感器与 Arduino 板和 0.96 英寸 OLED 显示屏连接。 OLED显示屏将以米/秒为单位显示风速…

LeetCode_回溯_中等_1774.最接近目标价格的甜点成本

目录1.题目2.思路3.代码实现&#xff08;Java&#xff09;1.题目 你打算做甜点&#xff0c;现在需要购买配料。目前共有 n 种冰激凌基料和 m 种配料可供选购。而制作甜点需要遵循以下几条规则&#xff1a; 必须选择 一种 冰激凌基料。可以添加 一种或多种 配料&#xff0c;也…

[附源码]计算机毕业设计基于SpringBoot的酒店预订系统设计与实现

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

BlockingQueue二

接着上篇BlockingQueue没讲完的 LinkedTransferQueue LinkedTransferQueue是一个由链表结构组成的无界阻塞队列&#xff0c;相对于其它阻塞队列&#xff0c;LinkedBlockingQueue可以算是LinkedBlockingQueue与SynhronoousQueue结合&#xff0c;LinkedtransferQueue是一种无界…

(For Final Exam)Linux操作系统期末整理

1.linux文件权限一共10位长度第一段指文件类型 第二段指拥有者所具有的权限 第三段指所属组的成员对于这个文件具有的权限 第四段指其他人对于这个文件有没有任何权限2.shell是一种命令解释程序 3.>将标准输出信息写入一个新文件(重定向),>>将标准输出信息添加到一个…

第一章 算法在计算中的作用

第1章 算法在计算中的作用第一周 记于2022/12/4“是否存在一个通用的过程(算法)。可以自动判定任意命题是否正确?” 否 算法:一个定义明确的是可计算过程(Input -> Computational Procedure / algorithm -> Output) 算法是正确的:若对每个输入实例算法都以…