基础算法之插入排序

插入排序是一种最基本的排序方法,时间复杂度为O(n2)。

其基本思想就是假设A[0, ... j-1]为已经排好序的子数组,通过把A[j]与前面的元素进行比较,将A[j]插入到已经排好顺序的子数组之中。

用C语言简单实现的插入排序如下:

 1 /* 插入排序的C语言实现, 时间复杂度为O(n2) */
 2 /* a为要排序的数组, LEN为数组的长度 */
 3 void insert_sort(int a[], int LEN)
 4 {
 5     int i, j, key;
 6     for(j=1; j<LEN; j++)
 7     {
 8         key = a[j];
 9         i = j-1;
10         while(i>0 && a[i]>key)
11         {
12             a[i+1] = a[i];
13             --i;
14         }
15         a[i+1] = key;
16     }
17 }

测试代码如下:

 1 #include<stdio.h>
 2
 3 #define MAXSIZE 10
 4
 5 /* 插入排序的C语言实现, 时间复杂度为O(n2) */
 6 /* a为要排序的数组, LEN为数组的长度 */
 7 void insert_sort(int a[], int LEN)
 8 {
 9     int i, j, key;
10     for(j=1; j<LEN; j++)
11     {
12         key = a[j];
13         i = j-1;
14         while(i>0 && a[i]>key)
15         {
16             a[i+1] = a[i];
17             --i;
18         }
19         a[i+1] = key;
20     }
21 }
22
23 int main()
24 {
25     int a[MAXSIZE];
26     int i;
27     printf("Please input the num:\n");
28     for(i=0; i<MAXSIZE; i++)
29     {
30         scanf("%d",&a[i]);
31     }
32     printf("before the sort:\n");
33     for(i=0; i<MAXSIZE; i++)
34     {
35         printf("%d ", a[i]);
36     }
37     printf("\n");
38
39     insert_sort(a, MAXSIZE);
40
41     printf("after the sort:\n");
42     for(i=0; i<MAXSIZE; i++)
43     {
44         printf("%d ", a[i]);
45     }
46     printf("\n");
47
48 }
时间: 2025-01-09 23:26:48

基础算法之插入排序的相关文章

java基础算法之插入排序

一.插入排序介绍 插入排序(Insertion Sort)是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入.插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间.时间复杂度:O(n^2); 算法描述:     1.排序从第二个元素开始,第一个元素默认为有序的.     2.取出下一个元素(第一次取第二个,后面依

基础算法之插入排序Insertion Sort

原理 通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入.通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间.相信大家都打过扑克牌,很好理解. 例子 将数组[5,6,3,1,8,7,2,4]进行从小到大排序 排序步骤: 从第一个元素开始,该元素可以认为已经被排序 取出下一个元素,在已经排序的元素序列中从后向前扫描 如果该元素(已排序)大于新元素,将该元素移到下一位置

基础算法

c语言基础算法大全 冒泡排序 选着排序 插入排序 快速排序 shell排序. 合并排序. 下面是各个排序算法的实现: 冒泡排序 void bobuleSort(int a[], int len) { int i,j,flag =1; for(i = 0; i<len; i++) { for(int j =len-1; j>i; j--) { if(a[j] <= a[i]) { int tmp = a[j]; a[j] = a[i]; a[i] = tmp; flag = 0; } }

基础算法之排序--快速排序

1 /************************************************************************************** 2 * Function : 快速排序 3 * Create Date : 2014/04/21 4 * Author : NTSK13 5 * Email : [email protected] 6 * Copyright : 欢迎大家和我一起交流学习,转载请保持源文件的完整性. 7 * 任何单位和个人不经本人允许不

九章算法 基础算法 强化算法 系统设计 大数据 安卓 leetcode 高清视频

leetcode 直播视频讲座录像 九章算法视频录像,PPT 算法班,算法强化班,Java入门与基础算法班,big data项目实战班,Andriod项目实战班 九章算法下载 九章算法面试 九章算法leetcode 九章算法答案 九章算法mitbbs 九章算法班 九章算法ppt 九章算法录像 九章算法培训 九章算法微博 leetcode 视频 九章算法偷录 算法培训 算法班课程大纲: 1 从strStr谈面试技巧与Coding Style(免费试听) 2 二分搜索与旋转排序数组 Binary S

算法录 之 基础算法

这一篇文章主要说说一些基础算法,这些算是很多其他算法的基石. 主要包括  模拟,暴力,枚举,递归,贪心,分治. 1,模拟: 顾名思义,模拟就是...饿,模拟,有一些题目就是给你一些步骤,然后你写代码一步步去模拟那些步骤就行.这类题目主要属于基础题,但是当然如果需要模拟的步骤足够恶心的话,还是比较麻烦的... 具体模拟的例子在之后的练习中会遇到的,按照题目要求一步步做就行,一般算法难度比较小. 2,暴力: 顾名思义,暴力就是...饿,暴力.比如说题目让从平面上的10个点中取三个点,让他们形成的三角

排序算法 之 插入排序

本次介绍排序算法中的插入排序. 1.直接插入排序: 基本思想: 直接插入排序也需要对待排序的序列在外层进行n-1次遍历,每次遍历时只把本次遍历次数处的元素和该元素之前的元素进行比较,来决定插入位置,并把从插入位置开始到该元素之前的所有元素后移,使从序列开始到该元素为止序列中的元素有序,直至遍历完成序列整体有序,插入排序算法的时间复杂度为O(n2): 如下表格所示为待排序的序列: 3 2 1 7 6 5 4 8 9 当进行第一次遍历时把元素e[1]和e[0]作比较,e[1]<e[0],所以e[1]

最最最最最最最最基础的C---C简介和基础算法

C简介 C是一门程序设计语言,面向过程的语言.于1972至1973年设计出来的语言. C具有32个关键字,9种控制语句,34种运算符. 函数是C的基本单位:一个C程序的执行总是从main函数开始的. C程序运行步骤:源程序--编译-->目标文件--执行-->可执行目标程序. 基础算法 完整的程序设计=数据结构+算法+程序设计方法+语言工具 算法特效: 1.有穷性:一个算法包含有限的操作步骤 2.确定性:确定算法的每一个步骤都是确定的 3.有零个或多个输入 4.有一个或多个输出 5.有效性:算法

复习基础算法的感想

晚上做杭电OJ,第二题是一个比较直观的题,我也是太直观了.贴出代码,供自己反省,从7点15分一直做到结束,wa9次....orz....看来自己的算法功底还差的很远很远. 接下的几天,学习大白上的基础 算法部分. #include<iostream> #include<stdio.h> #include<cstring> using namespace std; char a[20],b[20]; char c[20]; void shuchu(int num) { i