樓上的用的是C++
創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括張家口網(wǎng)站建設(shè)、張家口網(wǎng)站制作、張家口網(wǎng)頁(yè)制作以及張家口網(wǎng)絡(luò)營(yíng)銷策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,張家口網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到張家口省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
若單純的用C那就是這樣
#includestdio.h
#define
"NO.%d
%d
%d
%d
%d
%3.2f
%3.2f\n",1+i,stu[i].num,stu[i].mat,stu[i].ENG,stu[i].com,stu[i].aver,stu[i].total//宏定義節(jié)約時(shí)間
struct
student
{
int
num;
int
mat;
int
ENG;
int
com;
float
aver;
float
total;
}stu[10];//定義結(jié)構(gòu)體變量
void
main()
{
int
i;
void
take_turn_print(struct
student
stu1[10])
;
float
sum(int
x,int
y,int
z);//聲明求和函數(shù)
for(i=0;i10;i++)
scanf("%d%d%d%d",stu[i].num,stu[i].mat,stu[i].ENG,stu[i].com);
for(i=0;i10;i++)
{
stu[i].total=sum(stu[i].mat,stu[i].ENG,stu[i].com);//調(diào)用求和函數(shù)
stu[i].aver=stu[i].total/3;
}
take_turn_print(stu);//調(diào)用排序
打印函數(shù)
}
void
take_turn_print(struct
student
stu1[10])
{
void
change(int
*x,int
*y);//聲明換位函數(shù)
void
change1(float
*x,float
*y);//聲明換位函數(shù)
int
i,j;
for(j=0;j9;j++)//冒泡排序
為理解簡(jiǎn)單
就沒用別的排序方法
哈哈
{
for(i=0;i9-j;i++)
{
if(stu1[i].averstu1[i+1].aver)
{
change(stu1[i].num,stu1[i+1].num);//
值交換
change(stu1[i].mat,stu1[i+1].mat);//
值交換
change(stu1[i].ENG,stu1[i+1].ENG);//
值交換
change(stu1[i].com,stu1[i+1].com);//
值交換
change1(stu1[i].aver,stu1[i+1].aver);//
值交換
change1(stu1[i].total,stu1[i+1].total);//
值交換
}
}
}
for(i=0;i10;i++)
printf(print);//打印
}
void
change(int
*x,int
*y)
{
int
i;
i=*x;
*x=*y;
*y=i;//利用指針做變量替換
}
void
change1(float
*x,float
*y)
{
float
i;
i=*x;
*x=*y;
*y=i;//利用指針做變量替換
}
float
sum(int
x,int
y,int
z)
{
float
i;
i=(float)(x+y+z);
return(i);
}
前幾天也是幫同學(xué)做這樣的題
一模一樣
看來(lái)你也是WH大學(xué)的
首先這是一種快速排序的算法,你也應(yīng)該知道,快速排序就是選擇序列中的一個(gè)元素作為基準(zhǔn),通過循環(huán)找到這個(gè)基準(zhǔn)最終的位置,并把所有小于這個(gè)基準(zhǔn)的元素移到這個(gè)位置的左邊,大于基本的元素移到右邊,這樣再對(duì)這個(gè)基準(zhǔn)的左右兩邊分別遞歸調(diào)用自己,最終就能得到排序的結(jié)果。
再來(lái)解釋一下這個(gè)例子,它選擇的基準(zhǔn)就是v[(left+right)/2],然后將這個(gè)基準(zhǔn)雨v[left]交換,現(xiàn)在假設(shè)你想從頭排序到最后,則你會(huì)將left傳個(gè)0,也就是他將這個(gè)基準(zhǔn)和V[0]交換了,這個(gè)時(shí)候開始循環(huán),因?yàn)榈谝粋€(gè)元素是基準(zhǔn),所以從第二個(gè)元素開始循環(huán)(也就是left+1),然后到if判斷部分,如果v[i]v[left],也就是說這個(gè)時(shí)候已經(jīng)至少有一個(gè)元素比基準(zhǔn)小了,所以基準(zhǔn)至少在v[1]或者之后了,所以他把你找到的這個(gè)比基準(zhǔn)小的v[i]和v[++last]交換,這時(shí)候v[i]的位置已經(jīng)是在基準(zhǔn)的正確位置或者之前了,不會(huì)在基準(zhǔn)之后的,所以這就實(shí)現(xiàn)了把比基準(zhǔn)小的元素移到基準(zhǔn)的正確位置之前,你說的【第一遍執(zhí)行過程中,第8行l(wèi)ast=left=0,那么到了11行時(shí)相當(dāng)于交換v[1]和v[0+1]】這沒有錯(cuò),確實(shí)是在自己交換自己,但是這樣并不違背前面的思路不是么?當(dāng)if條件不滿足的時(shí)候,last是不會(huì)增加的,但是i會(huì)一直加1,所以last和i就會(huì)不同,這只是在將比基準(zhǔn)小的元素移到基準(zhǔn)之前,每有一個(gè)比基準(zhǔn)小的,last就加1,這樣當(dāng)你循環(huán)一遍之后的last值就是基準(zhǔn)應(yīng)該在的位置,而且這個(gè)時(shí)候,所有比基本小的元素也都在last之前了,這時(shí)候last位置的元素也是比基準(zhǔn)小的,這沒關(guān)系,因?yàn)橹筮€有一句swap[v,last,left],到目前位置,基準(zhǔn)的位置找到了,基準(zhǔn)左邊的元素都比基準(zhǔn)小,右邊都比基準(zhǔn)大,再對(duì)基準(zhǔn)的左右兩邊遞歸調(diào)用自己,就完成了序列的排序。
1、冒泡排序(最常用)
冒泡排序是最簡(jiǎn)單的排序方法:原理是:從左到右,相鄰元素進(jìn)行比較。每次比較一輪,就會(huì)找到序列中最大的一個(gè)或最小的一個(gè)。這個(gè)數(shù)就會(huì)從序列的最右邊冒出來(lái)。(注意每一輪都是從a[0]開始比較的)
以從小到大排序?yàn)槔?,第一輪比較后,所有數(shù)中最大的那個(gè)數(shù)就會(huì)浮到最右邊;第二輪比較后,所有數(shù)中第二大的那個(gè)數(shù)就會(huì)浮到倒數(shù)第二個(gè)位置……就這樣一輪一輪地比較,最后實(shí)現(xiàn)從小到大排序。
2、雞尾酒排序
雞尾酒排序又稱雙向冒泡排序、雞尾酒攪拌排序、攪拌排序、漣漪排序、來(lái)回排序或快樂小時(shí)排序, 是冒泡排序的一種變形。該算法與冒泡排序的不同處在于排序時(shí)是以雙向在序列中進(jìn)行排序。
原理:數(shù)組中的數(shù)字本是無(wú)規(guī)律的排放,先找到最小的數(shù)字,把他放到第一位,然后找到最大的數(shù)字放到最后一位。然后再找到第二小的數(shù)字放到第二位,再找到第二大的數(shù)字放到倒數(shù)第二位。以此類推,直到完成排序。
3、選擇排序
思路是設(shè)有10個(gè)元素a[1]-a[10],將a[1]與a[2]-a[10]比較,若a[1]比a[2]-a[10]都小,則不進(jìn)行交換。若a[2]-a[10]中有一個(gè)以上比a[1]小,則將其中最大的一個(gè)與a[1]交換,此時(shí)a[1]就存放了10個(gè)數(shù)中最小的一個(gè)。同理,第二輪拿a[2]與a[3]-a[10]比較,a[2]存放a[2]-a[10]中最小的數(shù),以此類推。
4、插入排序
插入排序是在一個(gè)已經(jīng)有序的小序列的基礎(chǔ)上,一次插入一個(gè)元素*
一般來(lái)說,插入排序都采用in-place在數(shù)組上實(shí)現(xiàn)。
具體算法描述如下:
⒈ 從第一個(gè)元素開始,該元素可以認(rèn)為已經(jīng)被排序
⒉ 取出下一個(gè)元素,在已經(jīng)排序的元素序列中從后向前掃描
⒊ 如果該元素(已排序)大于新元素,將該元素移到下一位置
⒋ 重復(fù)步驟3,直到找到已排序的元素小于或者等于新元素的位置
⒌ 將新元素插入到下一位置中
⒍ 重復(fù)步驟2~5
#include?stdio.h
void?mysort(int?*p,int?n){
int?i,j,k;
for(i=0;in;i++){
for(k=i,j=k+1;jn;j++)
if(p[k]p[j])
k=j;
if(k-i)
j=p[k],p[k]=p[i],p[i]=j;
}
}
int?main(int?argc,char?*argv[]){
int?a[10]={100,90,80,70,60,50,40,30,20,10,},i;
mysort(a,10);
for(i=0;i10;printf("%d?",a[i++]));
printf("\n");
return?0;
}
當(dāng)前標(biāo)題:c語(yǔ)言編程函數(shù)排序,排序函數(shù)C語(yǔ)言
文章路徑:http://chinadenli.net/article8/heihip.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、網(wǎng)站改版、Google、服務(wù)器托管、電子商務(wù)、ChatGPT
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)