直插排序(C语言实现)

来源:互联网 发布:37诸神黄昏进阶数据 编辑:程序博客网 时间:2024/05/21 17:03

算法思想

从数组第1位开始遍历(数组下标从0开始,设排序为升序排列),备份 当前下标的值,遍历该下标之前的元素,若该元素的值比备份下标的值大,则该元素向后移动一位,接着判断前一个元素;若该元素的值比备份下标的值小,则该元素不做处理。代码实现如下:

//升序直插排序#include <stdio.h>#include <malloc.h>void insert_sort(int *a, int len);int main(void){    int i;    int len;    int * a;    printf("请输入要排序的元素的个数:");    scanf("%d",&len);//存储要排的数的个数    a = (int *)malloc(len * sizeof(int));//动态定义内存    printf("请输入要排的数:\n");    for (i = 0; i < len; i++) { //要排的数的输入        scanf("%d",&a[i]);    }    insert_sort(a, len);    printf("升序排列结果为:\n");    for (i = 0; i < len; i++) {  //排序后结果的输出        printf("%d\t",a[i]);    }    return 0;}void insert_sort(int *a, int len){    int i;    int j;    int temp;      for (i = 1; i < len; i++) {        temp = a[i];  //备份当前下标的值        j = i - 1;        while (j >= 0 && a[j] > temp) {   //在数组内且值大于当前下标的值            a[j + 1] = a[j];  //该元素向后移动一位            j--;  //        }        a[j+1] = temp;  //插入该元素    }}
原创粉丝点击