直接插入排序Linux下c 实现

Linux C 算法——排序 排序(Sort)是将无序的记录序列(或称文件)调整成有序的序列。      为了方便讨论,在此首先要对排序下一个确切的定义: 假设含有n个记录的序列为              { R1、R2、,。。。Rn } 其相应的关键字序列为              {K1、K2,。。。。Kn} 需确定1,2,。。。,n的一种排列 p1,p2,。。。pn,使其相应的关键字满足如下的非递减(或非 阅读详情

        直接插入排序把待排序序列分为两个序列:一个有序序列和一个无序序列。每次排序时,取无序序列的第一个元素,从有序序列尾部向前扫描,比较有序序列的元素,并把该元素插入到有序序列的合适位置,使有序序列继续保持有序并增长。下面给出关键代码:

       1、插入排序头文件:InsertSort.h

#ifndef INSERTSORT_H
#define INSERTSORT_H
extern void InsertSort(int *pArr, int length);
#endif


        2、插入排序源文件:InsertSort.c

#include "InsertSort.h"

void InsertSort(int *pArr, int length)
{
        int i,j,tmp;
        for(i=1; i<length; i++)
        {
                j=i-1;
                tmp=*(pArr+i);
                while(j>=0 && tmp < *(pArr+j))
                {
                        *(pArr+j+1)=*(pArr+j);
                        j--;
                }
                if(j!=i-1)
                {
                        *(pArr+j+1)=tmp;
                }
        }
}


           3、main头文件:main.h

#ifndef MAIN_H
#define MAIN_H
#include "InsertSort.h"
#include <stdio.h>
void outputArr(const int *pArr, const int length);
#endif


          4、main 源文件:main.c

#include "main.h"

int main(void)
{
        printf("input array length:\n");
        int length;
        scanf("%d", &length);
        if(length<=0)
        {
                printf("length must be larger 0\n");
                return 1;
        }
        int i;
        int arr[length];
        for(i=0; i< length; i++)
        {
                printf("input arr[%d] value:\n", i);
                scanf("%d", &arr[i]);
        }
        printf("arr orig:");
        outputArr(arr, length);
        InsertSort(arr, length);
        printf("arr insert sort completed:");
        outputArr(arr, length);

}

void outputArr(const int *pArr, const int length)
{
        int i;
        for(i=0; i<length; i++)
        {
                printf(" %d", *(pArr+i));
        }
        printf("\n");
}


              4、编译:

[root@localhost insertSort]$ gcc -c InsertSort.c
[root@localhost insertSort]$ gcc -c main.c
[root@localhost insertSort]$ gcc -o main InsertSort.o main.o


            如果运气不是非常坏,你将看到可执行文件main,执行main,大致如下:

[root@localhost insertSort]$ ./main 
input array length:
5
input arr[0] value:
43
input arr[1] value:
65
input arr[2] value:
76
input arr[3] value:
1
input arr[4] value:
43
arr orig: 43 65 76 1 43
arr insert sort completed: 1 43 43 65 76

       

            插入排序最佳效率o(n),最糟效率O(n²),适用于排序小列表。若列表基本有序,则插入排序比冒泡、选择排序更有效率。
    

C语言——数组中的插入排序法! C语言——插入排序法! C语言中有很多排序的方法,这次我先介绍一下插入排序法。 阅读详情

相关推荐

Linux:内排序(插入排序,选择排序,交换排序,归并排序,基数排序)

编译环境:Linux 10.04 LTS GCC 1.插入排序: #include <stdio.h> #include <stdlib.h> #include <string.h> //交换 void swap(int *a, int *b) { int tmp; tmp = *a; *a = *b; *b = tmp; } //打印一个数组 ...

不秃头的程序猿Gabriel的博客 336

Linux C直接插入排序算法实现

直接插入排序思想是将待排序元素一个一个插入到已排序队列:由于一个元素不存在排序,因此从第二个元素起,将第二个元素之前的元素(也就是第一个元素)看成是已排序队列,将第二个元素与已排序队列比较,找到合适位置并插入;依此类推,将剩下元素插入到已排序队列,完成排序。   时间复杂度:O(N^2) 稳定性:稳定   注:时间复杂度与选择(冒泡)排序一样,而代码逻辑看起来比选择(冒泡)排序难理解。 ...

szkbsgy的专栏 390

Part03 数据结构

本文介绍了CSP-S初赛中常见的高级数据结构及其实现,包括: 线性结构:双端栈、双端队列、单调队列、优先队列和ST表,重点分析了它们的特点、时间复杂度及典型应用场景。 集合与森林:并查集(带路径压缩和按秩合并)和树的孩子兄弟表示法,展示了多叉树转化为二叉树存储的方法。 特殊树结构:包括二叉堆、树状数组、线段树和字典树,详细说明了它们的构建、查询和更新操作,特别强调了线段树的递归实现和字典树的前缀匹配特性。 每种数据结构都配有核心C++代码实现,涉及数组模拟、动态规划和树形结构等编程技巧,适合算法竞赛选手快速

weixin_43863957的博客 1179

排序(二) 之直接插入排序

文章目录一、直接插入排序二、代码示例   一、直接插入排序 插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法。 它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素...

qigaohua的博客 210

Sourcetree与Gitee的搭配使用

初次将gitee与sourcetree联合起来使用,还是遇到了不少问题,其中最让人烦恼的就是在我修改了一下用户名之后,便无法在Sourcetree直接推送到gitee,很是让人郁闷。本文处理Sourcetree与gitee搭配使用过程中的问题:Sourcetree身份验证失败,无法推送;Sourcetree推送时,无法显示要推送的分支;Sourcetree远端上面有感叹号。

年少时的棉花糖 4433

Sentence-BERT 语义相似度双塔模型

论文介绍 发表:2019,EMNLP 论文题目:《Sentence-BERT:sentence embeddings using siaese BERT-networks》 论文地址:https://arxiv.org/abs/1908.10084 Github:https://github.com/UKPLab/sentence-transformers 适用领域: 句向量生成 语义相似度计算 语义搜索 无监督任务(聚类) 1 概述 在20年之前的各种预训练模型中,比如bert,XLNet,Alb

weiyaner的博客 9193

73-插入排序——直接插入排序

1. 插入排序   插入排序的基本思想:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子表中的适当位置,直到全部记录插入完成为止。 2. 直接插入排序   假设待排序的记录存放在数组R[0 .. n-1]中,排序过程的某一中间时刻,R被划分成两个子区间R[0 … i-1]和R[i … n-1],其中已排好序的有序区,当前未排序的部分称其为无序区。 图1-直接插入排序...

网络安全 1万+

GQA数据集介绍

GQA,这是一个用于真实世界视觉推理和组合问答的新数据集。2200万个不同的推理问题,所有这些问题都带有表示其语义的功能程序。答案分布受到严格控制。11.3万张图像、2200万个问题,推理能力有对象和属性识别、传递关系跟踪、空间推理、逻辑推理和比较。

qq_56551150的博客 2954

(排序算法)linux c语言实现直接插入排序和冒泡排序

以下两个代码,只有排序部分是不同的,可以看到直接插入排序算法要比冒泡排序算法略快, 直接插入排序,就是将第一个元素视为已经排好序的,再将第二个元素插入到已经排好序的队列中,依次类推, 冒泡排序,就是两两比较,12,23,34,...,最后会有一个最大或者最小的数字放到两头(最前或者最后),然后剩下的元素再做如此操作。 直接插入排序: /**************************...

天泉证道 1116

英飞凌 AURIX Development Studio工程移植到Hightec的方法

1. 软件简介 AURIX™ Development Studio是英飞凌针对AURIX TC2XX/TC3XX系列单片机推出了一款免费的软件,集成了iLLD库,内置Tasking compiler和Tasking Debugger,但这两个模块只能用于非商业用途,可供学习和试用。iLLD库是英飞凌为TC2XX和TC3XX Tricore系列单片机提供的底层驱动库,有完善的使用手册,和较好的移植性。 Hightec是一款可以用来开发Aurix系列单片机的编译器,有免费版,可商用,集成GCC编译器,可用UDE

weixin_42967006的博客 7134

如何有效使用Project(1)——编制进度计划、保存基准

1.前言: 软件产品的研发、升级、定制等,一般都是以项目的形式进行,此时项目进度计划以及资源使用情况就变成了项目经理关注的重点。如何让项目计划有效可控,及时暴露问题?如何查看资源的负荷情况,看资源分配是否合理。 当然,如果你的公司已经实施了专门的PM软件来监督管控,可以忽略本文。否则,你可以用微软的Project来做到这一工作。 我也算是一个专业的从事PM软件产品的人(虽然我们的客户都是制造...

weixin_34236869的博客 2115

Linux下c直接插入排序算法

1 //直接插入排序   2 #include   3 void D_sort(int str[],int length)   4 {int i,j,temp;   5 for(i=1;i   6 {   7 for(j=i;j>=1;j--)   8 {   9 if(str[j-1]>str[j])  10 {  11 temp=str[j-1];  12 str[j-

qq314777895的专栏 582

Android Binder——数据传递载体(二十一)

同一进程间的对象传递都是通过引用来做的,因而本质上就是传递了一个内存地址。而跨进程采用了虚拟内存机制,两个进程都有自己独立的内存地址空间,所以跨进程传递的地址值是无效的。进程间的数据传递是 Binder 机制中的重要一环,Android 系统中担负这一重任的就是 Parcel。Parcel 是一种数据的载体,用于承载希望通过 IBinder 发送的相关信息(包括数据和对象引用)。正是基于 Parcel 这种跨进程传输数据的能力,进程间的 IPC 通信才能更加平滑可靠。

小旭的专栏 575

linux下c语言的8种排序法

快速排序 直接插入排序 希尔排序 简单选择排序 堆排序 冒泡排序 归并排序 基数排序 1快速排序 #include <stdio.h> void QuickSort(int *a, int start, int end) { int x = start; int y = end; int base = a[x]; if (x >= y) { return; ...

Tyeat的博客 503

ANSYS——模态分析的理论基础

ANSYS模态分析理论基础

python_AI_fans的博客 9072

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

七种内部排序算法基本原理及实现

概述         近期重新

u013703257的专栏 810

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

直接插入排序、折半插入排序、shell插入排序

直接插入排序: /*直接插入排序(升序排列) 2013/10/13 B区自习室(正在学习C/C++常用算法手册) Created By qianshou */ #include #include #define SIZE 10 using namespace std; void InsertSort(int *a,int len) { int i,j,t,k; for(

学如逆水行舟,不进则退 1371

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

linux c 实现八大排序算法总结(转)

linux c 实现八大排序算法总结(转) 插入排序 1.直接插入排序 原理:将数组分为无序区和有序区两个区,然后不断将无序区的第一个元素按大小顺序插入到有序区中去,最终将所有无序区元素都移动到有序区完成排序。 要点:设立哨兵,作为临时存储和判断数组边界之用。 实现: [liul@test algorithms]$ more InsertSort.c  ...

iteye_4495的博客 217

linux c 排序算法,各种排序算法

#include #include #include #include #include #define N 25000 // 待排序元素的个数void insertsort(int R[N+1]) // 直接插入排序{int i,j;for (i=2; i<=N; i++) {R[0]=R; // 设置监视哨j=i-1;while (R[0]R[j+1]=R[j];j...

weixin_34158442的博客 251

希尔排序Linux下C实现

希尔排序Linux下C实现 <!-- #favor_form {width:200px} #favor_form p {color:#666} #favor_form form {height:60px; width:200px} #favor_form form ._favor_input {display:block; margin:2px 0; wi

wangpengqi的专栏 854

linux c排序算法

一、冒泡排序 基本思想:比较相邻的两个数,如果前者比后者大,则进行交换。每一轮排序结束,选出一个未排序中最大的数放到数组后面。 #include <stdio.h> #include <stdlib.h> int main() { int i, j, num[8] = {0}; printf("please input eight number: "); for( i = 0; i < 8; i++){ scanf("%d", &num[i]); }

qq_36246937的博客 341

基于Linux操作系统下的Shell排序算法

希尔排序(Shell Sort)是 DLShell 于1959 年提出来的一种排序算法,在这之前排序算法的时间复杂度基本都是 O(n2)的,希尔排序算法是突破这个时间复杂度的第一批算法之一。

weixin_47348589的博客 702

Linux C 数据结构—排序

Linux C 数据结构—排序一.排序概述二.快速排序三.选择排序: 一.排序概述 排序方式:(内排序) 插入排序 --> 直接插入排序、链表插入排序、 折半插入排序。 交换排序 --> 起泡排序、快速排序。 选择排序 归并排序 基数排序 影响排序效率的因素:比较的次数、数据移动的次数: 如果选用 比较次数少 的排序方式: 折半插入排序。 选用 数据移动次数少 的排序方式: 链表...

sinat_41617828的博客 221

希尔排序Linux下c 实现

这次,我们谈论下希尔排序,希尔排序也叫递减增量排序算法。步长也是影响希尔排序的一个重要因素,我们这里主要用Marcin Ciura设计的步长。关键代码如下: 1、希尔排序头文件:shellSort.h #ifndef SHELLSORT_H #define SHELLSORT_H extern void shellSort(int * pArr, const int length); #

心灵净土 2839
上一篇: 鸡尾酒排序Linux下c 实现
下一篇: 奇偶排序Linux下c 实现
love__coder
博客等级 码龄18年 180粉丝 248原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值