插入排序(INSERTION_SORT)

插入排序(INSERTION_SORT)

1)原理 : 插入排序对于少量的元素排序是一个有效的算法。插入排序的工作方式像是在拿扑克牌一样,最开始的时候手里是空的,每抽到一张牌就将其在另一只手上按一定的规律排好序,直到所有的元素排列完成。

2)C语言实现

#include<stdio.h>
#include<cstdlib>
void sortNum(int count, int *a)
{
    for (int i = 1; i < count; i++)
    {
        for (int j = 0; j < i; j++)
        {
            if (a[j] >= a[i])
            {
                //每插入一个数之后向后,把数组其他元素向后挪动
                int temp = a[i];
                for (int k = i; k > j; k--)
                {
                    a[k] = a[k - 1];
                }
                a[j] = temp;
            }
        }
    }
}

void main()
{
    int temp,count, *p;
    printf("please input the count :");
    scanf_s("%d", &count);
    p = (int *)malloc(count * 2);
    printf("\nplease input the number to be sorted : \n");
    for (int i = 0; i < count; i++)
    {
        scanf_s("%d", p+i);
    }
    sortNum(count, p);
    for (int i = 0; i < count; i++)
    {
        printf("%d ", p[i]);
    }
    system("pause");
}

3)分析

  1. 最好情况(序列已经有序) :插入排序只需要将整个序列遍历一遍即可。故时间复杂度为O(n),为线性时间复杂度。
  2. 最坏情况(序列与需要排列的顺序相反):则每次遍历都需要将元素向后移位,时间复杂度为O(n^2)。
  3. 平均情况:随机选择n个数来进行插入排序,平均情况下,对元素A[j]来说,确定A[0~j-1]元素和A[j]的大小,次数大约在j/2次左右,因此平均时间复杂度也是O(n^2)。
时间: 2024-10-07 18:41:13

插入排序(INSERTION_SORT)的相关文章

算法导论2.1 插入排序

插入排序 // insertion_sort.h not with template #include <iostream> #include <stdint.h> // INSERTION-SORT(A) // for j = 2 to A.length // key = A[j] // // Insert A[j] into sorted sequence A[1..j - 1]. // i = j - 1 // while i > 0 and a[i] > key

INSERTION_SORT插入排序C++实现

以下用C++实现插入排序的升序和降序排序 算法来自<算法导论> #include<iostream> using namespace std; void INSERTION_SORT(int *A, int N) { for(int j = 1; j < N; ++j) { int key = A[j]; int i = j - 1; while(i >= 0 && key < A[i]) { A[i + 1] = A[i]; -- i; } A[

3种sort:insertion_sort,merge_sort,quick_sort 插入排序 合并排序 快速排序

插入排序,普通排序 一般 前端够用,样本容量小于1000,根本看不出性能问题 function insertion_sort(arr){ var len=arr.length; for(var j=1;j<len;j++){ var key=arr[j]; var i=j-1; while(i>=0&&arr[i]>key){ arr[i+1]=arr[i]; i=i-1; } arr[i+1]=key; } } 合并排序 merge_sort function _mer

插入排序(insertion_sort)——Python实现

# 插入排序 # 作用:对给出的n个顺序不定的数进行排序 # 输入:任意数组A # 输出:按顺序排列的数组A # 时间复杂度 n(n-1) 至 (n(n-1))/2 # 插入排序过程 # 第一趟:选择第一个元素,之前没有其他元素可以比较,故放在第一位 # 第二趟:选择第二个元素,与前一个元素比较,若比之大,则不动:若比之小,则与之交换 # 第三趟:选择第三个元素,与前一个元素比较,若比之大,则不动:若比之小,则与之交换 #        直到该元素前面没有再比它小的数 # 每次循环确定一个数的相

算法 排序lowB三人组 冒泡排序 选择排序 插入排序

参考博客:基于python的七种经典排序算法   [经典排序算法][集锦]     经典排序算法及python实现 首先明确,算法的实质 是 列表排序.具体就是操作的列表,将无序列表变成有序列表! 一.排序的基本概念和分类 所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作.排序算法,就是如何使得记录按照要求排列的方法. 排序的稳定性: 经过某种排序后,如果两个记录序号同等,且两者在原无序记录中的先后秩序依然保持不变,则称所使用的排序方法是稳定的,反之是不稳定

【算法导论】插入排序

排序问题 输入:n个数的一个序列<a1, a2, ..., an> 输出:输入序列的一个排列<b1, b2, ..., bn>,满足 b1 ≤ b2 ≤ ... ≤ bn. 插入排序 对于插入排序,我们将其伪代码命名为Insertion-sort,其中的参数是一个数组A[1..n],包含长度为n的要排序的一个序列.(在代码中,A中元素的数目n用A.length来表示.)该算法原址排序输入的数:算法在数组A中重排这些数,在任何时候,最多只有其中的常数个数字存储在数组外面.在过程Ins

排序算法--插入排序

插入排序Insertion sort  插入排序就是每一步都将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕. 插入排序方法分直接插入排序和折半插入排序两种,这里只介绍直接插入排序,折半插入排序留到"查找"内容中进行. 图1演示了对4个元素进行直接插入排序的过程,共需要(a),(b),(c)三次插入.         static void insertion_sort(int[] unsorted)         {             for (int

插入排序 | 冒泡排序 | 希尔排序 | 堆排序 | 快速排序 | 选择排序 | 归并排序

以下是最近学习各种算法的代码实现: #include <stdlib.h> #include <stdio.h> #include <time.h> #include <limits.h> typedef int EleType; typedef int (*CompFunc)(void *,void *); int IntComp(void * a,void *b) { if(*(int *)a > *(int *)b) return 1; if(*

算法导论—排序之插入排序

void insertion_sort(vector<int> &num){ for(int i = 1; i < num.size(); i++){ int j = i-1; int val = num[i]; while(j>=0 && num[j] >= val){ num[j+1] = num[j]; j--; } num[j+1] = val; } } 每次迭代时,将num[i] 作为key值,且前子数组[0,i-1] 构成已排好序,每次与左