1. c語言怎樣通過函數調用實現選擇排序法
c語言通過函數調用實現選擇排序法:
1、寫一個簡單選擇排序法的函數名,包含參數。int SelectSort(int * ListData,int ListLength);
2、寫兩個循環,在循環中應用簡單選擇插入排序:
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;
}
4、簡單選擇排序中,需要移動的記錄次數比較少,主要的時間消耗在對於數據的比較次數。基本上,在比較的時候,消耗的時間復雜度為:n*n。
2. c語言——選擇排序
遞歸版
#include<stdlib.h>
#include<stdio.h>
#define arrSize 1000
void RecurSelectSort(int a[], int n, int i);
main()
{
int a[arrSize], i, n;
printf("Please input the number of integers:"); /* 列印提示信息 */
scanf("%d", &n); /* 讀取字元串長度 */
printf("Please input the integers:"); /* 列印提示信息 */
/* 讀取數組元素 */
for(i=0;i<n;i=i+1){
scanf("%d", &a[i]);
}
/* 進行升序函數調用 */
for(i=0;i<n;i=i+1){
RecurSelectSort(a, n, i);
}
/* 列印數組元素 */
for(i=0;i<n;i=i+1){
printf("%d ", a[i]);
}
printf("\n"); /* 換行 */
system("pause");
}
void RecurSelectSort(int a[], int n, int i)
{
int b, max;
if(n==1){
if(a[n-1]>a[n]){
max=a[n-1];
a[n-1]=a[n];
a[n]=max;
}
}
else{
if(a[n-2]>a[n-1] && n>2){
b=a[n-1];
a[n-1]=a[n-2];
a[n-2]=b;
}
RecurSelectSort(a, n-1, i);
i=0;
}
}
3. C語言,用函數實現選擇排序,對C純菜鳥
程序比較凌亂,不過分成函數寫的思想倒還可以,注意自己定義的變數,大小寫對應的是不同的變數(compare裡面),而且你的看起來更像是直接排序;主函數裡面應該先初始化數組在排序,順序很關鍵
4. C語言選擇排序法
人家的效率高,交換次數少。比如3、2、1三個數。
你是第一輪3和2換變成2、3、1,再2和1換,變成1、3、2,第二輪3和2換變成1、2、3
他的是第一輪從後面選一個比3小的最小的數,K保存這個數的下標,先k是1,再k是2,一輪循環玩了才3和1交換,變成1、2、3,第二輪不交換。
你的演算法沒輪交換次數不定,看數據,他的每輪最多交換一次,特別是數據多時用他的效率高很多,因為給K賦值比交換快很多
5. 編寫函數,使用選擇排序法對數組進行排序(用C語言)
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
intmain(void)
{
inta[10],i,j,tmp,b;
srand(time(NULL));
for(i=0;i<10;i++)
a[i]=rand()%100;
for(i=0;i<10;i++)
printf("%3d",a[i]);
printf(" ");
for(i=0;i<9;i++)
{
tmp=i;
for(j=i+1;j<10;j++)
{
if(a[tmp]>a[j])
tmp=j;
}
if(i!=tmp)
{
b=a[tmp];
a[tmp]=a[i];
a[i]=b;
}
}
for(i=0;i<10;i++)
printf("%3d",a[i]);
printf(" ");
return0;
}
隨機產生數組中的元素, 更合理一些。 網路中有各種版本。
6. C語言,編寫一個函數,函數是用選擇排序法將數組排序
#include<stdio.h>
void px(int a[])
{
int i,temp,j;
for(i=0;i<10;i++)
{
for(j=i;j<10;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;i<10;i++)
{
printf("成績:");
scanf("%d",&a[i]);
}
px(a);
for(i=0;i<10;i++)
{
printf("%d",a[i]);
printf("\n");
}
}
你的錯誤有點多,px(10)該改成px(a),還有for語句少打了括弧,還有for語句裡面的i和p的初值都應該為0,而你的是1,編程序的時候要注意代碼的格式 排版 不然很難找錯的 就像你的for語句少打了括弧一樣 自己寫完了都不容易看出來
還有你那px函數裡面的變數聲明了太多,沒必要 代碼看起來要簡單 可讀性才強
我幫你把沒必要的刪了 看起來更舒服
7. c語言用指針寫選擇法排序函數
你的程序沒錯,只不過這不是選擇法,是冒泡發,選擇發如下:
void
sort(int
*a,int
n)
{
int
i,j,t,temp;
for(i=0;i<n-1;i++)
{
t=i;/初始定義t為未排序數的第一個
for(j=i+1;j<n;j++)
{
if(*(a+t)<*(a+j))/挑選出更大的數的位置,把他賦給t
t=j;
}
temp=*(a+i);
/t是最大的那個數的位置,把他和未排序的第一個交換位置
*(a+i)=*(a+t);
*(a+t)=temp;
}
}
main()
{
int
i,a[10],*p=a;
printf("input
zhe
array
a:\n");
for(i=0;i<10;i++)
scanf("%d",p++);
printf("\n");
p=a;
sort(p,10);
p=a;
printf("zhe
sort
array
is:\n");
for(i=0;i<10;i++)
printf("%d,",a[i]);
getch();
}
8. c語言,使用函數的選擇法排序
voidselectionsort(inta[],intm)
{
inti,j;
intk;
inttmp;
for(i=0;i<m-1;i++)//控制循環次數,n個數需要n-1次循環
{
k=i;
for(j=i+1;j<m;j++)
{
if(a[j]<a[k])
k=j;
}
//i不等於k是就證明a[i]不是最小的,
//i等於k時證明a[i]就是本輪比較過程中最小的值
if(i!=k)
{
tmp=a[i];
a[i]=a[k];
a[k]=tmp;
}
}
}
9. c語言選擇排序法
外面的for循環,依次從隊列中取出一個數用來比較
裡面的for循環,用來比較上面選擇的數據與後面的每個數據。
10. C語言選擇法排序
#include<stdio.h>
#defineM 5
void main()
{
int b[M],i,j,t,k;
for(i=0;i<M;i++)
scanf("%d",&b[i]);
for(i=0;i<M-1;i++)
{
for(k=i,j=i+1;j<M;j++)
if(b[k]<b[j])
k=j;
if(i!=k)
{
t=b[i];
b[i]=b[k];
b[k]=t;
}
}
for(i=0;i<M;i++)
printf("%d ",b[i]);
}
錯在大括弧位置加錯了。
代碼:
#include<stdio.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置成無序組起始位置元素下標
for(j = i;j < n;j++)//遍歷無序組,找到最小元素。
{
if(num[min]>num[j])
{
min = j;
}
}
if(min != i)//如果最小元素不是無序組起始位置元素,則與起始元素交換位置
{
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);//這里需要將數列元素個數傳入。有心者可用sizeof在函數內求得元素個數。
for(i = 0;i < 6;i++)
{
printf("%d ",num[i]);
}
return 0;
}