void?selectionsort(int?a[],int?m)
創(chuàng)新互聯(lián)總部坐落于成都市區(qū),致力網(wǎng)站建設(shè)服務(wù)有網(wǎng)站設(shè)計(jì)制作、網(wǎng)站建設(shè)、網(wǎng)絡(luò)營(yíng)銷策劃、網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站維護(hù)、公眾號(hào)搭建、小程序制作、軟件開發(fā)等為企業(yè)提供一整套的信息化建設(shè)解決方案。創(chuàng)造真正意義上的網(wǎng)站建設(shè),為互聯(lián)網(wǎng)品牌在互動(dòng)行銷領(lǐng)域創(chuàng)造價(jià)值而不懈努力!
{
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]就是本輪比較過程中最小的值
if(i?!=?k)
{
tmp?=?a[i];
a[i]?=?a[k];
a[k]?=?tmp;
}
}
}
c語(yǔ)言通過函數(shù)調(diào)用實(shí)現(xiàn)選擇排序法:
1、寫一個(gè)簡(jiǎn)單選擇排序法的函數(shù)名,包含參數(shù)。int SelectSort(int * ListData,int ListLength);
2、寫兩個(gè)循環(huán),在循環(huán)中應(yīng)用簡(jiǎn)單選擇插入排序:
int SelectSort(int * ListData,int ListLength)
{
int i , j ;
int length = ListLength;
for(i=0;i=length-2;i++)
{
int k = i;
for(j=i+1;j=length-1;j++)
{
if(ListData[k]ListData[j])
{
k=j;
}
}
if(k!=i)
{
int tmp = ListData[i];
ListData[i] = ListData[k];
ListData[k] = tmp;
}
}
return 0;
}
3、對(duì)編好的程序進(jìn)行測(cè)試,得出測(cè)試結(jié)果:
int main()
{
int TestData[5] = {34,15,6,89,67};
int i = 0;
printf("排序之前的結(jié)果\n");
for(i = 0;i5;i++)
printf("|%d|",TestData[i]);
int retData = SelectSort(TestData,5);
printf("排序之后的結(jié)果:\n");
for(i = 0;i5;i++)
printf("|%d|",TestData[i]);
return 0;
}
4、簡(jiǎn)單選擇排序中,需要移動(dòng)的記錄次數(shù)比較少,主要的時(shí)間消耗在對(duì)于數(shù)據(jù)的比較次數(shù)。基本上,在比較的時(shí)候,消耗的時(shí)間復(fù)雜度為:n*n。
把
if(p!=i)
{
q=a[p];
a[p]=a[i];
a[i]=q;
}
這一段放到前面的p=m;后地}后面。
1、打開visual C++ 6.0,準(zhǔn)備一個(gè)空白的c語(yǔ)言文件,引入頭文件,在main函數(shù)中定義變量和數(shù)組:
2、接下來用scanf函數(shù)輸入的10個(gè)數(shù),將輸入的數(shù)存入到變量a中,接著進(jìn)行比較排序,如果后一個(gè)數(shù)比前一個(gè)數(shù)大則利用中間變量t實(shí)現(xiàn)倆值互換,最后輸出排序的結(jié)果:
3、編譯運(yùn)行程序,輸入任意的10個(gè)數(shù),回車后即可看到排序后的結(jié)果。以上就是c語(yǔ)言中選擇排序的用法:
選擇排序是一種簡(jiǎn)單直觀的排序算法。
工作原理:
每一次從待排序的數(shù)據(jù)元素中選出最?。ɑ蜃畲螅┑囊粋€(gè)元素,存放在序列的起始位置,直到全部待排序的數(shù)據(jù)元素排完。
性能:
選擇排序是不穩(wěn)定的排序方法(比如序列[5, 5, 3]第一次就將第一個(gè)[5]與[3]交換,導(dǎo)致第一個(gè)5挪動(dòng)到第二個(gè)5后面)。
選擇排序的時(shí)間復(fù)雜度是O(n^2)
思想:
n個(gè)記錄的文件的直接選擇排序可經(jīng)過n-1趟直接選擇排序得到有序結(jié)果:
①初始狀態(tài):無序區(qū)為R[1..n],有序區(qū)為空。
②第1趟排序
在無序區(qū)R[1..n]中選出關(guān)鍵字最小的記錄R[k],將它與無序區(qū)的第1個(gè)記錄R[1]交換,使R[1..1]和R[2..n]分別變?yōu)橛涗泜€(gè)數(shù)增加1個(gè)的新有序區(qū)和記錄個(gè)數(shù)減少1個(gè)的新無序區(qū)。
……
③第i趟排序
第i趟排序開始時(shí),當(dāng)前有序區(qū)和無序區(qū)分別為R[1..i-1]和R(i..n)。該趟排序從當(dāng)前無序區(qū)中選出關(guān)鍵字最小的記錄 R[k],將它與無序區(qū)的第1個(gè)記錄R交換,使R[1..i]和R分別變?yōu)橛涗泜€(gè)數(shù)增加1個(gè)的新有序區(qū)和記錄個(gè)數(shù)減少1個(gè)的新無序區(qū)。
C語(yǔ)言版代碼:
#include?stdio.h
#include?math.h
#define?MAX_SIZE?101
#define?SWAP(x,?y,?t)??((t)?=?(x),?(x)?=?(y),?(y)?=?(t))
void?sort(int[],?int);??????/*?selection?sort?*/
int?main()
{
int?i,?n;
int?list[MAX_SIZE];
printf("Enter?the?number?of?numbers?to?generate:?");
scanf_s("%d",?n);
if?(n??1?||?n??MAX_SIZE){
fprintf(stderr,?"Improper?value?of?n\n");
exit(1);
}
for?(i?=?0;?i??n;?i++){????/*?randomly?generate?numbers?*/
list[i]?=?rand()?*?1000;
printf("%d?",?list[i]);
}
sort(list,?n);
printf("\n?Sorted?array:\n");
for?(i?=?0;?i??n;?i++)????/*?print?out?sorted?numbers?*/
printf("%d?",?list[i]);
printf("\n");
return?0;
}
void?sort(int?list[],?int?n)
{
int?i,?j,?min,?temp;
for?(i?=?0;?i??n?-?1;?i++){
min?=?i;
for?(j?=?i?+?1;?j??n;?j++)
if?(list[j]??list[min])
min?=?j;
SWAP(list[i],?list[min],?temp);
}
}
當(dāng)前名稱:大一c語(yǔ)言函數(shù)選擇法排序 大一c語(yǔ)言函數(shù)選擇法排序教學(xué)視頻
標(biāo)題網(wǎng)址:http://muchs.cn/article32/hphpsc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站收錄、網(wǎng)站維護(hù)、域名注冊(cè)、電子商務(wù)
聲明:本網(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í)需注明來源: 創(chuàng)新互聯(lián)