直接插入排序

来源:互联网 发布:原生js模拟select 编辑:程序博客网 时间:2024/06/06 18:56

直接插入排序

一、基本思想

将一个记录插入到已经排好序的有序表中,从而得到一个新的,记录增1的表。

二、时间复杂度


为O(n^2),但是它总的性能比冒泡排序和简单选择排序好一些。

三、代码实现

/*******************************************************************************************【直接插入排序】Author:tmwdate:2017-10-31********************************************************************************************/#include <stdio.h>#include <stdlib.h>int* direct_insert_sort( int array[] , int array_size ){    array[0] = 0;//数组的第一位用来做temp,相当于在数组首位挖了个坑    int i,j;    for( i = 2 ; i <= array_size ; i++ )//刚开始,认为第一个数即为有序的    {        if( array[i] < array[i-1] )//后一个元素比前一个元素小,则需要移动位置了,同时往首位填坑,如此循环        {            array[0] = array[i];            for( j = i-1 ; array[j] > array[0] ; j-- )                array[j+1] = array[j];            array[j+1] = array[0];//将当前i所指向的元素放入正确的位置        }    }    return array;}int main(){    int *array;    int i,array_size;    printf("请输入数组元素的个数\n");    scanf("%d",&array_size);    array = (int*)malloc(sizeof(int));    printf("请输入 %d 个元素\n",array_size);    for( i = 1 ; i <= array_size ; i++ )        scanf("%d",&array[i]);    array = direct_insert_sort( array , array_size );    printf("经直接插入排序后,数组元素顺序输出为:\n");    for( i = 1 ; i <= array_size ; i++ )        printf("%d ",array[i]);    return 0;}


四、程序运行结果






原创粉丝点击