码迷,mamicode.com
首页 > 编程语言 > 详细

用C实现插入排序

时间:2020-01-23 15:28:19      阅读:96      评论:0      收藏:0      [点我收藏+]

标签:time_t   --   排序   数组   printf   pen   事先   and   define   

插入这词太具有欺骗性,并不是说在已经生成的数组中又插进来一个什么新的数,而是从数组元素中选出一个“标杆”元素(按索引遍历),让这个元素和之前的元素进行比较,直到找出一个元素大于这个“标杆”元素进行交换。

这样一来,我们大概可以构建出两层循环-----

  1. 外循环负责遍历数组,每次选出新的标杆元素,
  2. 内层while循环,不断在标杆所在的索引位置之前搜寻,找出大于“标杆”的元素,完成和标杆的位置交换,
  3. 如果找不到,那么标杆元素就“名正言顺的呆在”当前的索引上。
void insertone(int a[])
{
    int temp,i,j;
    //事先我定义的就是10个元素的数组
    for (int i = 1; i < 10; i++)
    {
        temp = a[i];//----1
        j = i - 1;//-----2
        while (j>-1 && temp<a[j])
        {
            a[j + 1] = a[j];
            j--;
        }
        a[j + 1] = temp;//----3
    }
}

 

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void genarray(int a[],int *b)
{
    time_t t;
    int mynum;
    FILE *fp = fopen("E:\\myarray.txt", "w");
    srand((unsigned)time(&t));
    for (int i=0;i<10;i++)
    {
        *b = rand() % 100;
        fwrite(b,sizeof(int),1,fp);
    }
    fclose(fp);
}
void readarray(int a[],int *b)
{
    FILE *fp = fopen("E:\\myarray.txt", "rb");

    for (int i = 0; i < 10; i++)
    {
        fread(b, sizeof(int), 1, fp);
        //printf("%d\t", mynum);
        a[i] = *b;
    }
    fclose(fp);
}
void main()
{
    int a[10],mynum;
    genarray(a,&mynum);
    readarray(a, &mynum);
    for (int i = 0; i < 10; i++)
    {
        printf("%d\t", a[i]);
    }
    printf("\n");
    insertone(a, 27);
    for (int i=0;i<10;i++)
    {
        printf("%d\t",a[i]);
    }
    system("pause");
}

用C实现插入排序

标签:time_t   --   排序   数组   printf   pen   事先   and   define   

原文地址:https://www.cnblogs.com/saintdingspage/p/12230610.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!