常用排序算法之--直接插入排序

一直以来都是从博客园吸收营养,很想有机会写一些对博友们有用的文章,来回馈大家的无私奉献。最近博主在找工作,听小伙伴们说,数据结构与算法是必考项。于是痛下绝心决定写写排序算法。以备自查,同时与小伙伴们互勉。欢迎大家转载,如有错误,请指正。必感激不尽!

学习交流qq:792911374,闲话不说,开始正文了。。。。。

直接插入排序
将一个记录插入到已排序好的有序表中,从而得到一个新的,记录数增1的有序表。即:先将序列的第1个记录看成是一个有序的子序列,然后从第2个记录逐个进行插入,直至整个序列有序为止。如果碰到一个和插入元素相等的,那么插入元素把需要插入的元素放在相等的元素后面。相等元素的前后顺序没有改变,所以直接插入排序是稳定的排序算法。

算法适用于少量数据的排序。时间复杂度为O(n^2), 空间复杂度为O(1)。

算法为C语言代码,环境为qt。

 1 #include <QCoreApplication>
 2
 3 //数组元素个数
 4 const int MAX = 10;
 5 //字符数组个数
 6 const int CHARNUM = 20;
 7 //信息结构体
 8 struct RecordInfo{
 9    int key;
10    char name[20];
11 };
12 //数组元素的临时变量
13 struct RecordInfo info[MAX];
14
15 void genList();
16 void insertSort();
17 void printArray();
18
19 int main(int argc, char *argv[])
20 {
21     //函数调用
22     insertSort();
23     printArray();
24     QCoreApplication a(argc, argv);
25     return a.exec();
26 }
27
28 /**
29   * @函数名:
30   * @参数:无
31   * @返回值:无
32   * @用途:生成内容数组
33   * @作者:yangfy
34   */
35 void genList()
36 {
37     for(int i = 0; i < MAX; i++){
38         if ((i % 3 == 0) && i > 0)
39             info[i].key = info[i - 3].key;
40         else
41             info[i].key = rand();
42         snprintf(info[i].name, CHARNUM - 1, "内容为第:%d个", i);
43     }
44 }
45
46 /**
47   * @函数名:
48   * @参数:无
49   * @返回值:无
50   * @用途:直接插入排序
51   * @作者:yangfy
52   */
53 void insertSort()
54 {
55     genList();
56     struct RecordInfo recInfo;
57     for(int i = 1; i < MAX; i++){
58         for(int j = i; j > 0; j--){
59             //在有序的数组列表中,从后往前找比j大的交换位置
60             if(info[j].key < info[j - 1].key){
61                 recInfo = info[j];
62                 info[j] = info[j - 1];
63                 info[j - 1] = recInfo;
64             }
65         }
66     }
67 }
68
69 /**
70   * @函数名:
71   * @参数:无
72   * @返回值:无
73   * @用途:打印数组内容
74   * @作者:yangfy
75   */
76 void printArray()
77 {
78     for(int i = 0; i < MAX; i++){
79         printf("key为:%d, name为:%s\r\n", info[i].key, info[i].name);
80     }
81 }

程序截图:

时间: 2024-11-04 09:30:58

常用排序算法之--直接插入排序的相关文章

常用排序算法(三)直接插入排序

直接插入排序 概要 本章介绍排序算法中的直接插入排序.内容包括:1. 直接插入排序介绍2. 直接插入排序图文说明3. 直接插入排序的时间复杂度和稳定性4. 直接插入排序实现4.1  直接插入排序C实现4.2  直接插入排序C++实现4.3  直接插入排序Java实现 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3596881.html 更多内容:数据结构与算法系列 目录 直接插入排序介绍 直接插入排序(Straight Insertion Sort

4.2_8种常用排序算法2(插入排序:直接插入排序+希尔排序)

[插入排序] [直接插入排序实例] package com.sort.demo2; import java.util.Arrays; /** * 插入排序 */ public class InsertSort { public static void main(String[] args) { int[] arr = new int[]{1,4,5,7,3,9,8,0,2,6}; System.out.println(Arrays.toString(arr)); insertSort(arr);

Java常用排序算法+程序员必须掌握的8大排序算法+二分法查找法

Java 常用排序算法/程序员必须掌握的 8大排序算法 本文由网络资料整理转载而来,如有问题,欢迎指正! 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分配排序(基数排序) 所需辅助空间最多:归并排序 所需辅助空间最少:堆排序 平均速度最快:快速排序 不稳定:快速排序,希尔排序,堆排序. 先来看看 8种排序之间的关系: 1.直接插入排序 (1)基本思想:在要排序的一组数中,假设前面(n-1)[n>=2]

常用排序算法比较与分析

一.常用排序算法简述 下面主要从排序算法的基本概念.原理出发,分别从算法的时间复杂度.空间复杂度.算法的稳定性和速度等方面进行分析比较.依据待排序的问题大小(记录数量 n)的不同,排序过程中需要的存储器空间也不同,由此将排序算法分为两大类:[内排序].[外排序]. 内排序:指排序时数据元素全部存放在计算机的随机存储器RAM中. 外排序:待排序记录的数量很大,以致内存一次不能容纳全部记录,在排序过程中还需要对外存进行访问的排序过程. 先了解一下常见排序算法的分类关系(见图1-1) 图1-1 常见排

七种常用排序算法

七种常用排序算法 一.常见排序算法一览: 时间复杂度: 是一个函数,它定量描述了该算法的运行时间. 空间复杂度:一个算法在运行过程中临时占用存储空间大小的量度. 稳定性:保证排序前2个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同就稳定,反之不稳定. 视觉直观感受 7 种常用的排序算法 二.算法C#实现: 1. 直接插入排序: using System; using System.Collections.Generic; using System.Linq; using Sys

javascript常用排序算法实现

毕业后,由于工作中很少需要自已去写一些排序,所以那些排序算法都忘得差不多了,不过排序是最基础的算法,还是不能落下啦,于是找了一些资料,然后用Javascript实现了一些常用的算法,具体代码如下: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>

常用排序算法实现[交换排序之冒泡排序、快速排序]

相关知识 1. 稳定排序和非稳定排序: 稳定排序算法会依照相等的关键(换言之就是值)维持纪录的相对次序. 如果排序算法是稳定的,就是当有两个有相等关键的纪录R和S,且在原本的列表中R出现在S之前,在排序过的列表中R也将会是在S之前. 2. 内排序和外排序 在排序过程中,所有需要排序的数都在内存,并在内存中调整它们的存储顺序,称为内排序: 在排序过程中,只有部分数被调入内存,并借助内存调整数在外存中的存放顺序排序方法称为外排序. 3.算法分类 排序算法从理论上分为如下几类: (1) 交换排序法:

视觉直观感受7种常用排序算法

视觉直观感受若干常用排序算法 1 快速排序 介绍: 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见.事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来,且在大部分真实世界的数据,可以决定设计的选择,减少所需时间的二次方项之可能性. 步骤: 从数列中挑出一个元素,称为 "基准"(pivo

Java 常用排序算法/程序员必须掌握的 8大排序算法

Java 常用排序算法/程序员必须掌握的 8大排序算法 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分配排序(基数排序) 所需辅助空间最多:归并排序 所需辅助空间最少:堆排序 平均速度最快:快速排序 不稳定:快速排序,希尔排序,堆排序. 先来看看 8种排序之间的关系: 1.直接插入排序 (1)基本思想:在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排 好顺序的,现在要把第n 个数插到前