插入排序(InsertSort)

来源:互联网 发布:关闭windows数字签名 编辑:程序博客网 时间:2024/05/19 14:35

有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法。
插入排序的基本思想是:每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。
直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的纪录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的纪录插入完为止,得到一个新的有序序列。
直接插入排序的算法思路:
(1) 设置监视哨r[0],将待插入纪录的值赋值给r[0];
(2) 设置开始查找的位置j;
(3) 在数组中进行搜索,搜索中将第j个纪录后移,直至r[0].key≥r[j].key为止;
(4) 将r[0]插入r[j+1]的位置上。
如图:
这里写图片描述

这里写代码片#include<stdio.h>#include<stdlib.h>void insertSort(int* arr, int len);void array_show(int* arr, int len);int main(int argc, char* argv[]){    int arr[10] = {4,3,8,5,2,1,6,0,7,9};    array_show(arr, 10);    insertSort(arr,10);    putchar(10);    array_show(arr, 10);    system("pause");    return 0;}/*//1.void insertSort(int* arr, int len ) { for(int i=1;i<len;i++)//循环从第二个数组元素开始,因为arr[0]作为最初已排序部分 {     int temp=arr[i];//temp标记为未排序第一个元素     int j=i-1; while (j>=0 && arr[j]>temp)//将temp与已排序元素从小到大比较,寻找temp应插入的位置{     arr[j+1]=arr[j];     j--; } arr[j+1]=temp; } } */void array_show(int* arr, int len){    int i ;    for(i = 0; i != len; i ++)    {        printf("%d ", arr[i]);    }}//2.void insertSort(int a[], int n){    int i=0,j=0;    for(i=1; i<n; i++)    {        int temp=a[i];        for(j=i-1; j>=0 && temp<a[j]; j--)        {            a[j+1]=a[j];        }        a[j+1]=temp;    }}

插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。

0 0