真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

c語(yǔ)言插入排序函數(shù),c語(yǔ)言排序函數(shù)怎么用

C語(yǔ)言插入排序算法

int main ()

創(chuàng)新互聯(lián)專注于梁子湖企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,電子商務(wù)商城網(wǎng)站建設(shè)。梁子湖網(wǎng)站建設(shè)公司,為梁子湖等地區(qū)提供建站服務(wù)。全流程定制網(wǎng)站制作,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)

{

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語(yǔ)言 插入排序 要最簡(jiǎn)單的 不要帶指針的 一看就懂的那種

#include stdio.h

#include "4-1 CreateData.c" //生成隨機(jī)數(shù)的函數(shù)

#define ARRAYLEN 10 //需要排序的數(shù)據(jù)元素?cái)?shù)量

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

{

int i,j,t;

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

{

t=a[i]; //取出一個(gè)未排序的數(shù)據(jù)

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

a[j+1]=a[j]; //向后移動(dòng)數(shù)據(jù)

a[j+1]=t; //插入數(shù)據(jù)到序列

}

}

int main()

{

int i,a[ARRAYLEN]; //定義數(shù)組

for(i=0;iARRAYLEN;i++) //清空數(shù)組

a[i]=0;

if(!CreateData(a,ARRAYLEN,1,100)) //判斷生成隨機(jī)數(shù)是否成功

{

printf("生成隨機(jī)數(shù)不成功!\n");

getch();

return 1;

}

printf("原數(shù)據(jù):"); //輸出生成的隨機(jī)數(shù)

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

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

printf("\n");

InserSort(a,ARRAYLEN); //調(diào)用插入排序函數(shù)

printf("排序后:");

for(i=0;iARRAYLEN;i++) //輸出排序后的結(jié)果

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

printf("\n");

getch();

return 0;

}

主要是看懂這個(gè)函數(shù) void InserSort(int a[],int n)

C語(yǔ)言插入排序法

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

//外層

{

t=a[i];

for(

j=i-1

;

j=0

ta[j]

;

j--

)

//內(nèi)層

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

a[j+1]=t;

}

你要理解插入排序的原理,外層for從第二個(gè)數(shù)開(kāi)始遍歷(i從1開(kāi)始),用t(即對(duì)應(yīng)的a[i])和其前面的所有值進(jìn)行比較,如果t大,則該數(shù)后移一位,直到t小或者j小于0的時(shí)候退出內(nèi)層for循環(huán),這時(shí)候出現(xiàn)的格局就是所有在i位置之前比a[i]小的值全部后移了一位,退出循環(huán)時(shí)就會(huì)空出一個(gè)位置來(lái)。舉個(gè)例子:輸入:1

3

2

4

第一次循環(huán)時(shí),t=a[1]=3,ta[0],所以a[0]后移一位(即:a[j+1]=a[j]

-

a[1]=a[0]),之后出現(xiàn)結(jié)果:1124,這時(shí)候?qū)嶋H上0位置是給此時(shí)的t預(yù)留的位置,內(nèi)層for執(zhí)行完畢后,執(zhí)行:a[j+1]=t

正好彌補(bǔ)這個(gè)空缺。結(jié)果:3124

第二次循環(huán)時(shí),j=1,t=a[2]=2,ta[1],所以a[1]后移一位:a[2]=a[1],之后結(jié)果:3114,在比較t和a[0],t小,跳出內(nèi)層for,跳出時(shí)j為0,執(zhí)行:a[1]=t=2,結(jié)果:3214

下面就不講了,從上面可以看出,你說(shuō)的那一句,至關(guān)重要,外層for每循環(huán)一次就插入一位數(shù)據(jù),而a[j+1]=t,就是完成插入的最后一步。。

C語(yǔ)言,直接插入排序,要求:

真是搞不懂你們腦洞,一個(gè)插入排序還分成一堆函數(shù)寫(xiě)。。。

#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.數(shù)據(jù)分為兩部分,一開(kāi)始有序部分包含1個(gè)元素

//2.依次將無(wú)序部分的元素插入到有序部分當(dāng)中

void?Insert(int?i){

int?j?=?i-1,?k?=?a[i];??//j為當(dāng)前下標(biāo),?k為無(wú)序部分第一個(gè)元素

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

a[j+1]?=?a[j];????//循環(huán)的時(shí)候直接右移有序數(shù)組,為k騰出位置

j--;?? ?//不是k正確的位置,繼續(xù)往前循環(huán)

}

a[j+1]?=?k;??//出來(lái)的時(shí)候j多減了1,要加回去

}

void?Sort(){

//遍歷無(wú)序部分,每次取出第一個(gè)元素

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

Insert(i);

}

}

int?main(){

InputArraay();

Sort();

OutputArraay();

return?0;

}

C語(yǔ)言實(shí)現(xiàn)插入排序

? 通過(guò)C語(yǔ)言實(shí)現(xiàn)插入排序算法:對(duì)于少量排序的元素,插入排序是一個(gè)有效的算法,其操作過(guò)程類(lèi)似于手中的撲克牌,從第二個(gè)元素從左往右循環(huán)檢查比較,滿足A[i]A[i-1],則交換A[i]與A[i-1]的值。往復(fù)循環(huán)直到最后一個(gè)元素比較完成。具體程序如下:

#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語(yǔ)言實(shí)現(xiàn),經(jīng)調(diào)試已經(jīng)通過(guò)。

但依然有個(gè)問(wèn)題:在main()函數(shù)中調(diào)用insert_sort(int A[])時(shí),若單傳數(shù)組參數(shù)A[],再在insert_sort(int A[])函數(shù)里面調(diào)用len=sizeof(A)/sizeof(int)計(jì)算數(shù)組實(shí)際輸入長(zhǎng)度,但是得不到實(shí)際輸入的數(shù)組長(zhǎng)度,所以只能采用實(shí)參的方式將具體數(shù)字通過(guò)len傳到insert_sort(int A[],int len );在insert_sort(int A[])接收到A數(shù)組后直接計(jì)算A[]實(shí)際輸入長(zhǎng)度,有什么辦法可以實(shí)現(xiàn)?

C語(yǔ)言編程 排序并插入

寫(xiě)個(gè)樣例給你看看吧

#include?stdio.h

int?main()

{

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

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

scanf("%d",?a[0]);//輸入第一個(gè)數(shù)

for?(i?=?1;?i??9;?++i){//剩下的八個(gè)

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);//要插入的數(shù)

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;

}


當(dāng)前題目:c語(yǔ)言插入排序函數(shù),c語(yǔ)言排序函數(shù)怎么用
文章URL:http://weahome.cn/article/hsssch.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部