c语言插入排序函数,c语言排序函数怎么用

C语言插入排序算法

int main ()

创新互联专注于梁子湖企业网站建设,成都响应式网站建设公司,电子商务商城网站建设。梁子湖网站建设公司,为梁子湖等地区提供建站服务。全流程定制网站制作,专业设计,全程项目跟踪,创新互联专业和态度为您提供的服务

{

int i;

DataType a[MaxSize];

SqList L;

srand((unsigned)time(NULL));

for (i=0;iMaxSize;i++)

{

int number = rand()%MaxSize + 1;

//printf ("%d ",number);

a[i].key = number;

L.data[i].key = a[i].key;

}

return 0;

}

C语言 插入排序 要最简单的 不要带指针的 一看就懂的那种

#include stdio.h

#include "4-1 CreateData.c" //生成随机数的函数

#define ARRAYLEN 10 //需要排序的数据元素数量

void InserSort(int a[],int n)//直接插入排序

{

int i,j,t;

for(i=1;in;i++)

{

t=a[i]; //取出一个未排序的数据

for(j=i-1;j=0 ta[j];--j) //在排序序列中查找位置

a[j+1]=a[j]; //向后移动数据

a[j+1]=t; //插入数据到序列

}

}

int main()

{

int i,a[ARRAYLEN]; //定义数组

for(i=0;iARRAYLEN;i++) //清空数组

a[i]=0;

if(!CreateData(a,ARRAYLEN,1,100)) //判断生成随机数是否成功

{

printf("生成随机数不成功!\n");

getch();

return 1;

}

printf("原数据:"); //输出生成的随机数

for(i=0;iARRAYLEN;i++)

printf("%d ",a[i]);

printf("\n");

InserSort(a,ARRAYLEN); //调用插入排序函数

printf("排序后:");

for(i=0;iARRAYLEN;i++) //输出排序后的结果

printf("%d ",a[i]);

printf("\n");

getch();

return 0;

}

主要是看懂这个函数 void InserSort(int a[],int n)

C语言插入排序法

for(i=1;i4;i++)

//外层

{

t=a[i];

for(

j=i-1

;

j=0

ta[j]

;

j--

)

//内层

a[j+1]=a[j];

a[j+1]=t;

}

你要理解插入排序的原理,外层for从第二个数开始遍历(i从1开始),用t(即对应的a[i])和其前面的所有值进行比较,如果t大,则该数后移一位,直到t小或者j小于0的时候退出内层for循环,这时候出现的格局就是所有在i位置之前比a[i]小的值全部后移了一位,退出循环时就会空出一个位置来。举个例子:输入:1

3

2

4

第一次循环时,t=a[1]=3,ta[0],所以a[0]后移一位(即:a[j+1]=a[j]

-

a[1]=a[0]),之后出现结果:1124,这时候实际上0位置是给此时的t预留的位置,内层for执行完毕后,执行:a[j+1]=t

正好弥补这个空缺。结果:3124

第二次循环时,j=1,t=a[2]=2,ta[1],所以a[1]后移一位:a[2]=a[1],之后结果:3114,在比较t和a[0],t小,跳出内层for,跳出时j为0,执行:a[1]=t=2,结果:3214

下面就不讲了,从上面可以看出,你说的那一句,至关重要,外层for每循环一次就插入一位数据,而a[j+1]=t,就是完成插入的最后一步。。

C语言,直接插入排序,要求:

真是搞不懂你们脑洞,一个插入排序还分成一堆函数写。。。

#includecstdio

int a[20];

void InputArraay(){

for(int i = 1; i = 10; i++)scanf("%d",a[i]);

}

void OutputArraay(){

for(int i = 1; i = 10; i++)printf("%d ",a[i]);

}

//插入排序

//1.数据分为两部分,一开始有序部分包含1个元素

//2.依次将无序部分的元素插入到有序部分当中

void Insert(int i){

int j = i-1, k = a[i];  //j为当前下标, k为无序部分第一个元素

while(j=1  ka[j]){ //找到k元素在有序部分的位置

a[j+1] = a[j];    //循环的时候直接右移有序数组,为k腾出位置

j--;    //不是k正确的位置,继续往前循环

}

a[j+1] = k;  //出来的时候j多减了1,要加回去

}

void Sort(){

//遍历无序部分,每次取出第一个元素

for(int i = 2; i = 10; i++){ 

Insert(i);

}

}

int main(){

InputArraay();

Sort();

OutputArraay();

return 0;

}

C语言实现插入排序

  通过C语言实现插入排序算法:对于少量排序的元素,插入排序是一个有效的算法,其操作过程类似于手中的扑克牌,从第二个元素从左往右循环检查比较,满足A[i]A[i-1],则交换A[i]与A[i-1]的值。往复循环直到最后一个元素比较完成。具体程序如下:

#include stdio.h

#includeconio.h

/*----------

*INSERT_SORT

*

* args

* A[] int[],the number of A arrary

* len int ,A length

*

------------*/

void insert_sort(int A[],int len){

int i,j,key;

//printf("A length %d\n",len);  //output arrary length

for(j=1;jlen;j++){

    key=A[j];

    i=j-1;

    while (i-1A[i]key) {    //i from 0 to 5,so i-1

        A[i+1]=A[i];

        i=i-1;

        A[i+1]=key;

    }

}

//output A arrary

for(i=0;ilen;i++)

    printf("%d ",A[i]);

}

int main()

{

int A[10];

int i=0;

char c;

while(1){

    scanf("%d",A[i]); //input unmbers

    c=getchar();

    if(c=='\n')

        break;

    i++;

}

//printf("%d %d %d %d %d %d %d %d\n",A[0],A[1],A[2],A[3],A[4],A[5],A[6],A[7]);

//use insert_sort

insert_sort(A,i+1); //A length is i+1

return 0;

}

/*---test------------

* input 5 2 4 6 1 3

*

* output 1 2 3 4 5 6

* ------------------*/

以上程序使用的是Qt Creator 工具,用C语言实现,经调试已经通过。

但依然有个问题:在main()函数中调用insert_sort(int A[])时,若单传数组参数A[],再在insert_sort(int A[])函数里面调用len=sizeof(A)/sizeof(int)计算数组实际输入长度,但是得不到实际输入的数组长度,所以只能采用实参的方式将具体数字通过len传到insert_sort(int A[],int len );在insert_sort(int A[])接收到A数组后直接计算A[]实际输入长度,有什么办法可以实现?

C语言编程 排序并插入

写个样例给你看看吧

#include stdio.h

int main()

{

int n, a[11], i, j, t, v;

//scanf("%d", n);

scanf("%d", a[0]);//输入第一个数

for (i = 1; i  9; ++i){//剩下的八个

scanf(",%d", a[i]);

}

n = 9;

for (i = 0; i  n; ++i){//选择排序

t = i;

for (j = i + 1; j  n; ++j){

if (a[t]  a[j])t = j;

}

if (t != i){

v = a[t], a[t] = a[i], a[i] = v;

}

}

scanf("%d", v);//要插入的数

for (i = n-1; i = 0; --i){

if (a[i]  v){

a[i + 1] = a[i];

}

else break;

}

++i;//插入位置

a[i] = v;

n++;

for (i = 0; i  n; ++i){//输出

if (i == 0)printf("%d", a[i]);

else printf(",%d", a[i]);

}

printf("\n");

return 0;

}


标题名称:c语言插入排序函数,c语言排序函数怎么用
本文网址:http://scyanting.com/article/hsssch.html