㈠ 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;
}
㈡ C語言 誰能講解一下選擇排序法以及有效排序。
1、直接選擇排序的基本思想
n個記錄的文件的直接選擇排序可經過n-1趟直接選擇排序得到有序結果:
①初始狀態:無序區為r[1..n],有序區為空。
②第1趟排序
在無序區r[1..n]中選出關鍵字最小的記錄r[k],將它與無序區的第1個記錄r[1]交換,使r[1..1]和r[2..n]分別變為記錄個數增加1個的新有序區和記錄個數減少1個的新無序區。
……
③第i趟排序
第i趟排序開始時,當前有序區和無序區分別為r[1..i-1]和r[i..n](1≤i≤n-1)。該趟排序從當前無序區中選出關鍵字最小的記錄r[k],將它與無序區的第1個記錄r[i]交換,使r[1..i]和r[i+1..n]分別變為記錄個數增加1個的新有序區和記錄個數減少1個的新無序區。
這樣,n個記錄的文件的直接選擇排序可經過n-1趟直接選擇排序得到有序結果。
直接選擇排序的具體演算法如下:
void
selectsort(seqlist
r)
{
int
i,j,k;
for(i=1;i<n;i++){//做第i趟排序(1≤i≤n-1)
k=i;
for(j=i+1;j<=n;j++)
//在當前無序區r[i..n]中選key最小的記錄r[k]
if(r[j].key<r[k].key)
k=j;
//k記下目前找到的最小關鍵字所在的位置
if(k!=i){
//交換r[i]和r[k]
r[0]=r[i];r[i]=r[k];r[k]=r[0];
//r[0]作暫存單元
}
//endif
}
//endfor
}
//seleetsort
㈢ C語言程序 用選擇法對十個數排序
#include <stdio.h>
int main()
{int i,j,min,temp,a[11];
printf("enter data: ");
for (i=1;i<=10;i++)
{printf("a[%d]=",i);
scanf("%d",&a[i]);
}
printf(" ");
printf("The orginal numbers: ");
for (i=1;i<=10;i++)
printf("%5d",a[i]);
printf(" ");
for (i=1;i<=9;i++)
{min=i;
for (j=i+1;j<=10;j++)
if (a[min]>a[j]) min=j;
temp=a[i];
a[i]=a[min];
a[min]=temp;
}
printf(" The sorted numbers: ");
for (i=1;i<=10;i++)
printf("%5d",a[i]);
printf(" ");
return 0;
}
空白字元
空白字元會使scanf()函數在讀操作中略去輸入中的一個或多個空白字元,空白符可以是space,tab,newline等等,直到第一個非空白符出現為止。
非空白字元
一個非空白字元會使scanf()函數在讀入時剔除掉與這個非空白字元相同的字元。
㈣ C語言,用選擇法對數組中10個整數按由小到大排序求解釋!!!
選擇排序的思想是:每一趟的排序過程都是在當前位置後面剩下的待排序對象中選出值最小的那個,然後放到當前位置上。 該程序中k的定義主要是為了存放數組中最小數的位置。然後通過t=array[k];array[k]=array[i];array[i]=t;這三條語句,再把這數組中最小的數字放到前面。注意C語言當中的「=」不是等於,只是一種賦值運算。其中if(array[j]<array[k]) k=j;這條語句用來比較當前位置的值和初始值(即array[0]的值)的大小的。注意上述語句中第二個for循環的循環體語句只有一條,即:if(array[j]<array[k]) k=j;自己試著分析一下就明白了。㈤ C語言 誰能講解一下選擇排序法以及有效排序。
用[4,1,3,2]作例子吧
(1)找出最小的元素-----(4,1),即用4和1比較,是有效排序,比較結果是1比較小,因此1再和3,2比較,(1,3),(1,2)這兩次比較就不是有效比較了(1在3,2前面且比它們小)
因此第一輪排序為[1,4,3,2]
最小元素和第一個元素互換
(2)在剩餘序列中繼續找最小的元素(即排除了1)-----(4,3)比較,是有效排序。3比較小,因此3再和2比較,(3,2)是有效排序。找出最小的元素2。
第二輪排序為[1,2,3,4]
2和第二個元素4互換
(3)依次類推,(3,4)不是有效排序了。
因此,最後結果為[1,2,3,4]
有效排序為(4,1)
(4,3)
(3,2)
程序這東西要自己想,況且這個應該挺容易想出來的。。。。
㈥ C語言編程題:用選擇法對10個整數排序
#include<stdio.h>
int main()
{
int i,j,min,t,a[10]={2,4,8,3,6,9,7,222,64,88};
printf("排序前的序列為: ");
for(i=0;i<10;i++)//輸出排序前的序列
{
printf("%5d",a<i>);
}
printf(" ");
for(i=0;i<9;i++)
{
min=i;//把每次循環的第一個數作為最小值
for(j=i+1;j<10;j++)
{
if(a[min]>a[j])
min=j;//交換
}
if(min!=i)//說明第一個數不是最小數,所以將a[i+1]~a[10]中最小值與a<i>對換
{
t=a[min];
a[min]=a<i>;
a<i>=t;
}
}
printf("排序後的序列為: ");
for(i=0;i<10;i++)//輸出排序後的序列
printf("%5d",a<i>);
printf(" ");
return 0;
}
(6)c語言選擇法排序例題解析擴展閱讀:
return表示把程序流程從被調函數轉向主調函數並把表達式的值帶回主調函數,實現函數值的返回,返回時可附帶一個返回值,由return後面的參數指定。
return通常是必要的,因為函數調用的時候計算結果通常是通過返回值帶出的。如果函數執行不需要返回計算結果,也經常需要返回一個狀態碼來表示函數執行的順利與否(-1和0就是最常用的狀態碼),主調函數可以通過返回值判斷被調函數的執行情況。