#includestdio.h
10年的大名網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。全網(wǎng)營(yíng)銷推廣的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整大名建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)建站從事“大名網(wǎng)站設(shè)計(jì)”,“大名網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
#define?M 5
void main()
{
int b[M],i,j,t,k;
for(i=0;iM;i++)
scanf("%d",b[i]);
for(i=0;iM-1;i++)
{
for(k=i,j=i+1;jM;j++)
if(b[k]b[j])
k=j;
if(i!=k)
{
t=b[i];
b[i]=b[k];
b[k]=t;
}
}
for(i=0;iM;i++)
printf("%d ",b[i]);
}
錯(cuò)在大括號(hào)位置加錯(cuò)了。
擴(kuò)展資料:
C語(yǔ)言選擇排序詳解
工作原理是每一次從無(wú)序組的數(shù)據(jù)元素中選出最小(或最大)的一個(gè)元素,存放在無(wú)序組的起始位置,無(wú)序組元素減少,有序組元素增加,直到全部待排序的數(shù)據(jù)元素排完。
以升序?yàn)槔膱D解:
代碼:
#includestdio.h
void SelectionSort(int *num,int n)
{
int i = 0;
int min = 0;
int j = 0;
int tmp = 0;
for(i = 0;i n-1;i++)
{
min = i;//每次講min置成無(wú)序組起始位置元素下標(biāo)
for(j = i;j n;j++)//遍歷無(wú)序組,找到最小元素。
{
if(num[min]num[j])
{
min = j;
}
}
if(min != i)//如果最小元素不是無(wú)序組起始位置元素,則與起始元素交換位置
{
tmp = num[min];
num[min] = num[i];
num[i] = tmp;
}
}
}
(此處空一行)
int main()
{
int num[6] = {5,4,3,2,9,1};
int i = 0;
SelectionSort(num,6);//這里需要將數(shù)列元素個(gè)數(shù)傳入。有心者可用sizeof在函數(shù)內(nèi)求得元素個(gè)數(shù)。
for(i = 0;i 6;i++)
{
printf("%d ",num[i]);
}
return 0;
}
這是選擇排序。先用a[0]與a[1]比較,當(dāng)a[0]a[1]時(shí)并不交換,而用k記下來(lái)現(xiàn)在a[0]最小……這樣一趟比較完后a[k]就是整個(gè)數(shù)組中最小的元素,把它與a[0]交換;第二趟,從a[1]開(kāi)始重復(fù)前面的操作,那么最后a[1]就是剩下的n-1個(gè)元素中最小的……看a[0]、a[1]已經(jīng)由小到大排好了,當(dāng)做完n-1趟時(shí)不就把整個(gè)數(shù)組都排好了嗎?注意:t=array[k];array[k]=array[i];array[i]=t;不是for(j=i+1;jn;j++)的循環(huán)體,要等它循環(huán)完了后才執(zhí)行一次。
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;
}
}
}
c語(yǔ)言通過(guò)函數(shù)調(diào)用實(shí)現(xiàn)選擇排序法:
1、寫(xiě)一個(gè)簡(jiǎn)單選擇排序法的函數(shù)名,包含參數(shù)。int SelectSort(int * ListData,int ListLength);
2、寫(xiě)兩個(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。
選擇排序(Selection sort)是一種簡(jiǎn)單直觀的排序算法。工作原理是每一次從待排序的數(shù)據(jù)元素中選出最小(或最大)的一個(gè)元素,存放在序列的起始位置,直到全部待排序的數(shù)據(jù)元素排完。
以下是一個(gè)實(shí)現(xiàn)選擇排序的例子:
#define?SWAP(x,?y,?t)??((t)?=?(x),?(x)?=?(y),?(y)?=?(t))
//將list中的n個(gè)數(shù)據(jù),通過(guò)選擇排序算法排序。
void?selete_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++)//找出最小元素的下標(biāo)。
if?(list[j]??list[min])
min?=?j;
SWAP(list[i],?list[min],?temp);//交換最小元素到當(dāng)前起始位置。
}
}