#include?stdio.h
成都創(chuàng)新互聯(lián)公司專(zhuān)注于方山企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè),商城網(wǎng)站建設(shè)。方山網(wǎng)站建設(shè)公司,為方山等地區(qū)提供建站服務(wù)。全流程按需搭建網(wǎng)站,專(zhuān)業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)公司專(zhuān)業(yè)和態(tài)度為您提供的服務(wù)
#include?stdlib.h
#include?time.h
int?main(void)
{
int?a[10],i,j,tmp,b;
srand(time(NULL));
for(i=0;i10;i++)
a[i]=rand()%100;
for(i=0;i10;i++)
printf("%3d",a[i]);
printf("\n");
for(i=0;i9;i++)
{
tmp=i;
for(j=i+1;j10;j++)
?{
if(a[tmp]a[j])
tmp=j;
?}
if(i!=tmp)
{
b=a[tmp];
a[tmp]=a[i];
a[i]=b;
}
}
for(i=0;i10;i++)
printf("%3d",a[i]);
printf("\n");
return?0;
}
隨機(jī)產(chǎn)生數(shù)組中的元素, 更合理一些。 百科中有各種版本。
#includestdio.h
void px(int a[])
{
int i,temp,j;
for(i=0;i10;i++)
{
for(j=i;j10;j++)
{
if(a[i]=a[j])
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
}
void main()
{
int i,a[10];
for(i=0;i10;i++)
{
printf("成績(jī):");
scanf("%d",a[i]);
}
px(a);
for(i=0;i10;i++)
{
printf("%d",a[i]);
printf("\n");
}
}
你的錯(cuò)誤有點(diǎn)多,px(10)該改成px(a),還有for語(yǔ)句少打了括號(hào),還有for語(yǔ)句里面的i和p的初值都應(yīng)該為0,而你的是1,編程序的時(shí)候要注意代碼的格式 排版 不然很難找錯(cuò)的 就像你的for語(yǔ)句少打了括號(hào)一樣 自己寫(xiě)完了都不容易看出來(lái)
還有你那px函數(shù)里面的變量聲明了太多,沒(méi)必要 代碼看起來(lái)要簡(jiǎn)單 可讀性才強(qiáng)
我?guī)湍惆褯](méi)必要的刪了 看起來(lái)更舒服
給你一個(gè)直接插入排序
#include "stdio.h"
void InsertSort(int a[], int left, int right) {//對(duì)數(shù)組a從下標(biāo)為left到right區(qū)域進(jìn)行直接插入排序
int i, j, tmp;
for(i = left + 1; i = right; i++) {
for(j = i - 1, tmp = a[i]; j = left tmp a[j]; j++)
a[j + 1] = a[j];
a[j + 1] = tmp;
}
}
void main( ) {
int i, n, a[100];
scanf("%d", n);
for(i = 0; i n; i++)
scanf("%d", a[i]);
InsertSort(a, 0, n - 1);
printf("\n");
for(i = 0; i n; i++) printf("%d\t", a[i]);
}
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。
#include?stdio.h
//選擇排序算法,升序
void?sort(int?*arr,int?n)
{
int?i,j,k;
int?tmp;
for(i=0;in-1;i++)
{
k=i;??//開(kāi)始一趟選擇排序,假定第i個(gè)元素是后面n-i+1個(gè)未排序的元素中最小的元素
for(j=i+1;jn;j++)
{
if(arr[k]??arr[j])?//如果發(fā)現(xiàn)比當(dāng)前最小元素還小的元素,則更新記錄最小元素的下標(biāo)k
k=j;
}
//如果最小元素的下標(biāo)不是后面n-i+1的未排序序列的第一個(gè)元素,則需要交換第i個(gè)元素和后面找到的最小元素的位置
if(k?!=?i)
{
tmp=arr[k];
arr[k]=arr[i];
arr[i]=tmp;
}
}
}
int?main()
{
int?a[10]={?-5,-9,-8,3,9,2,-28,101,-395,0};
int?i;
sort(a,10);
for(i=0;i10;i++)
printf("%d?",a[i]);
printf("\n");
return?0;
}
//運(yùn)行結(jié)果
F:\c_worka.exe
-395?-28?-9?-8?-5?0?2?3?9?101