新聞中心
c語(yǔ)言運(yùn)用sort 排序函數(shù),需要的頭文件是什么?
sort不屬于C語(yǔ)言的標(biāo)準(zhǔn)函數(shù),所以也沒(méi)有相應(yīng)的頭文件,但是可以自定義。
成都創(chuàng)新互聯(lián)自2013年起,是專(zhuān)業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元河西做網(wǎng)站,已為上家服務(wù),為河西各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18980820575
sort?函數(shù)為將整型數(shù)組從小到大排序。
voidsort(int*a,intl)//a為數(shù)組地址,l為數(shù)組長(zhǎng)度。
{
inti,j;
intv;
//排序主體
for(i=0;il-1;i++)
for(j=i+1;jl;j++)
{
if(a[i]a[j])//如前面的比后面的大,則交換。
{
v=a[i];
a[i]=a[j];
a[j]=v;
}
}}
擴(kuò)展資料
c語(yǔ)言自有的qsort函數(shù)
#includestdio.h
#includestdlib.h
intcomp(constvoid*a,constvoid*b)//用來(lái)做比較的函數(shù)。
{
return*(int*)a-*(int*)b;
}
intmain()
{
inta[10]={2,4,1,5,5,3,7,4,1,5};//亂序的數(shù)組。
inti;
qsort(a,n,sizeof(int),comp);//調(diào)用qsort排序
for(i=0;i10;i++)//輸出排序后的數(shù)組
{
printf("%d\t",array[i]);
}
return0;
}
c語(yǔ)言 排序函數(shù)
首先這是一種快速排序的算法,你也應(yīng)該知道,快速排序就是選擇序列中的一個(gè)元素作為基準(zhǔn),通過(guò)循環(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í)候開(kāi)始循環(huán),因?yàn)榈谝粋€(gè)元素是基準(zhǔn),所以從第二個(gè)元素開(kāi)始循環(huán)(也就是left+1),然后到if判斷部分,如果v[i]v[left],也就是說(shuō)這個(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)的正確位置之前,你說(shuō)的【第一遍執(zhí)行過(guò)程中,第8行l(wèi)ast=left=0,那么到了11行時(shí)相當(dāng)于交換v[1]和v[0+1]】這沒(méi)有錯(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)小的,這沒(méi)關(guān)系,因?yàn)橹筮€有一句swap[v,last,left],到目前位置,基準(zhǔn)的位置找到了,基準(zhǔn)左邊的元素都比基準(zhǔn)小,右邊都比基準(zhǔn)大,再對(duì)基準(zhǔn)的左右兩邊遞歸調(diào)用自己,就完成了序列的排序。
c語(yǔ)言怎么用自定義函數(shù)排序
#include stdio.h
#include string.h#define NUM 3
struct student
{
char name[20]; /*姓名*/
long num; /*12位學(xué)號(hào)*/
double sum; /*總分*/
};
void Create_Students(struct student stu[NUM])
{
struct student *p;
printf("請(qǐng)輸入學(xué)生姓名 學(xué)號(hào)(12位) 總分:\n");
for( p = stu; p stu+NUM; p++)
{
scanf("%s %d %lf",p-name,p-num,p-sum); }
}
void Order_Students(struct student stu[NUM])//起泡法
{
int i,j;
struct student temp;
for(i=NUM-1;i=0;i--)
for(j=0;ji;j++)
if(stu[j].sumstu[j+1].sum)
{
temp = stu[j];
stu[j] = stu[j+1];
stu[j+1]=temp;
}
}
void main()
{
int i=1;
struct student *p;
struct student stu[NUM];
Create_Students(stu);
Order_Students(stu);
printf("%-20s %-13s %-6s %4s\n","姓名","學(xué)號(hào)(12位)","總成績(jī)","名次");
for(p=stu;pstu+NUM;p++,i++)
{
printf("%-20s %-13.0d %-8.2f %2d\n",p-name,p-num,p-sum,i);
}
}//你參考參考,嘿
c語(yǔ)言,使用函數(shù)的選擇法排序
void?selectionsort(int?a[],int?m)
{
int?i,j;
int?k;
int?tmp;
for(i?=?0;?i??m-1;?i++)//控制循環(huán)次數(shù),n個(gè)數(shù)需要n-1次循環(huán)
{
k?=?i;
for(j?=?i+1;?j??m?;?j++)
{
if(a[j]??a[k])
k?=?j;
}
//i不等于k是就證明a[i]不是最小的,
//i等于k時(shí)證明a[i]就是本輪比較過(guò)程中最小的值
if(i?!=?k)
{
tmp?=?a[i];
a[i]?=?a[k];
a[k]?=?tmp;
}
}
}
網(wǎng)頁(yè)標(biāo)題:C語(yǔ)言函數(shù)排序 c語(yǔ)言排序法
當(dāng)前URL:http://www.dlmjj.cn/article/ddjhohp.html