程序?qū)懙脤?shí)在有點(diǎn)亂,變量名的聲明與傳遞存在些問題,我?guī)湍愀母模?/p>
目前成都創(chuàng)新互聯(lián)公司已為上1000+的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁空間、綿陽服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計(jì)、雁江網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
#include stdio.h
#define N 5
int a[N];
void init(void);
void compare(void);
void disp(void);
void main()
{
// printf("")
init();
compare();
void disp();
}
void init(void)
{
a[N]={2,1,4,9,5};
}
void compare(void)
{
int i,j,t;
for(i=0;iN;i++)
for(j=i+1;jN;j++)
if(a[i]a[j])
{
t=a[i];
a[i]=a[j]
a[j]=t;
}
}
void disp(void)
{
int i;
for(i=0;iN;i++)
{
printf("%4d",a[i]);
}
}
程序改了很多,為什么?
數(shù)組a 定義為局部變量,你傳遞了卻沒返回,這樣使用不了,我改為了全局變量,這樣不需要傳遞,直接使用就行。
函數(shù)傳遞的另一個(gè)變量N 不需要傳遞,因?yàn)楸旧鞱就是個(gè)全局變量,直接使用就行。
還有一些定義了卻沒使用的變量我直接刪了。
你先編譯運(yùn)行一下,有錯(cuò)再回復(fù)。
希望我的回答能幫助到你。
c語言通過函數(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。
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]就是本輪比較過程中最小的值
if(i?!=?k)
{
tmp?=?a[i];
a[i]?=?a[k];
a[k]?=?tmp;
}
}
}
void sa(int array[],int n)
{
int i,j,k,temp;
for(i=0;i10;i++)
{
k=i; //保存i的值,用k來進(jìn)行循環(huán)排序
for(j=i+1;jn;j++) //將第i個(gè)元素后面的元素與第i個(gè)元素進(jìn)行比較
if(array[j]array[k]) //如果第k=i個(gè)元素后面的元素小于i號(hào)元素,交換兩個(gè)元素的標(biāo)號(hào), 這樣就將最小元素的標(biāo)號(hào)放到最前面
k=j; //交換標(biāo)號(hào)
temp=array[k]; //循環(huán)結(jié)束后,交換兩個(gè)標(biāo)號(hào)下的元素的值
array[k]=array[i];
array[i]=temp;
}
}
這個(gè)程序?qū)崿F(xiàn)的是由小到大的排序。第二個(gè)循環(huán)里面,就是i號(hào)元素后面最小的元素對(duì)應(yīng)的標(biāo)號(hào)放到k中,在交換當(dāng)前元素與k號(hào)元素中的值,實(shí)現(xiàn)由大到小排序