您的位置:首页 > 理论基础 > 数据结构算法

直接插入排序

2017-11-03 10:22 253 查看

直接插入排序

一、基本思想

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

二、时间复杂度

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

三、代码实现

/*******************************************************************************************
【直接插入排序】

Author:tmw
date: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;
}


四、程序运行结果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息