1樓:匿名使用者
修改如下,vc++2008測試通過。
#include
#define n 5
void main()
double a[n];
int k,j,l;
double temp;
printf("請輸入a的前%d個數,以回車鍵結束。",n);
for(k=0;kscanf("%lf",&a[k]);
for(l=0;lj=l;temp=a[l];
for(k=l+1;kif(a[k]temp=a[k];
if (j!=l){
a[j]=a[l];
a[l]=temp;
printf("a[%d]的大小順序為",n);
for(k=0;kprintf("%g",a[k]);
2樓:請叫我蒼穹
#include
#define n 5
main(){
int a[n];
int i,j,k;
for(i=0;iscanf("%d",&a[i]);
for(i=0;ifor(j=0;jif(a[j]k=a[j];
a[j]=a[j+1];
a[j+1]=k;
for(i=0;iprintf("%d ",a[i]);
這個是精簡版的 很容易看懂。
c語言程式設計:選擇法排序
3樓:大野瘦子
#include
#define m 5
void main()
int b[m],i,j,t,k;
for(i=0;iscanf("%d",&b[i]);
for(i=0;ifor(k=i,j=i+1;jif(b[k]k=j;
if(i!=k)
t=b[i];
b[i]=b[k];
b[k]=t;
for(i=0;iprintf("%d ",b[i]);
錯在大括號位置加錯了。
c語言選擇排序詳解。
工作原理是每一次從無序組的資料元素中選出最小(或最大)的乙個元素,存放在無序組的起始位置,無序組元素減少,有序組元素增加,直到全部待排序的資料元素排完。
以公升序為例的**:
**:#include
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] = ;
int i = 0;
selectionsort(num,6);//這裡需要將數列元素個數傳入。有心者可用sizeof在函式內求得元素個數。
for(i = 0;i < 6;i++)
printf("%d ",num[i]);
return 0;
4樓:1024程式設計師
c語言經典例子之選擇法排序。
5樓:哥們兒會_臭臭
選擇排序是一種簡單直觀的排序演算法。
工作原理:每一次從待排序的資料元素中選出最小(或最大)的乙個元素,存放在序列的起始位置,直到全部待排序的資料元素排完。
效能:選擇排序是不穩定的排序方法(比如序列[5, 5, 3]第一次就將第乙個[5]與[3]交換,導致第乙個5挪動到第二個5後面)。
選擇排序的時間複雜度是o(n^2)
思想: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)。
該趟排序從當前無序區中選出關鍵字最小的記錄 r[k],將它與無序區的第1個記錄r交換,使r[1..i]和r分別變為記錄個數增加1個的新有序區和記錄個數減少1個的新無序區。
c語言版**:
#include
#include
#define max_size 101
#define swap(x, y, t) (t) = (x), x) = (y), y) = (t))
void sort(int, int); /* selection sort */
int main()
for (i = 0; i < n; i++)
sort(list, n);
printf(" sorted array:");
for (i = 0; i < n; i++)/* print out sorted numbers */
printf("%d ", list[i]);
printf("");
return 0;
void sort(int list, int n)}
選擇排序 和 簡單選擇排序 有什麼區別?(c語言)
6樓:姒中折荌荌
選擇排序有很多種,簡單選擇排序只是其中一種:
1、簡單租雀選擇排序。
一般分為多趟,每一趟從待排資料中選出最小(或最大)的乙個元素,順序放在已排好序的。
數列的最後。
2、樹形選擇排序。
對n個記錄的關鍵字進行兩兩比較,然後在n/2個較小者之凳擾間再進行兩兩比較,如此重複,直。
至選出最小的記錄為止,又稱錦標賽排序。
3、堆排序。
分弊粗早大根堆和小根堆,大根堆(或小根堆)堆頂記錄的關鍵字最大(或最小)
c語言選擇法排序問題
7樓:匿名使用者
這個問題可以設想如果陣列就是從小到大的,會發生什麼情況:如果就是從小到大的陣列,if 語句沒用了,那麼直接執行a[ipos]=a[i], 這就會出現問題了,如果你沒 對ipos賦值,那麼程式會報錯,如果對ipos賦值,那麼該賦什麼值?毫無疑問是i,如果和i不同,那麼意味著每次迴圈a 陣列中ipos處的值都要改變為a[i],而a 就是從小到大的不需要改變,也會出問題。
再看一下你這個程式6為什麼沒了?
因為你這個陣列比較特殊,10到1遞減的,所以第1次排序是10和1對換,ipos=9;即1所在的位置。
第2次是9和2對換ipos=8;即2所在的位置。
第3次是8和3對換ipos=7;即3所在的位置。
第4次是7和4對換ipos=6;即4所在的位置。
第5次是6和5對換ipos=5;即5所在的位置。
注意在第5次排序之後已經得到從小到大的陣列了;
正常情況下後面的排序不會影響結果了。
後面的再排序,這就和剛開始說的情況一樣了,這些本來就是從小到大的,if語句沒用了,那麼也就意味著ipos不會改變了,而上面執行到ipos=5,所以後面每次迴圈執行a[ipos]=a[i],把i 處的值賦給a[ipos],也就是賦給a[5], 而a[5]的值是6,就是說後面每次排序會把替換6最終的結果是a[5]=10,6沒了。
所以可以看到如果當前迴圈i處a[i]就是最小值,是不需要進行替換操作的。但是如果不設定ipos=i,會導致執行a[ipos]=a[i],改變a[ipos]的值。
8樓:結構體神經
如果itemp不被賦值的話,那下面的if(a[j] 9樓:1024程式設計師 c語言經典例子之選擇法排序。 c語言選擇結構題 10樓:一顆程式猿 一開始, abcd分別賦值1,2,3,4 第乙個if, 因為是&&操作,所以兩個表示式都會被計算, 這兩個表示式又是個賦值表示式, a變成2, b變成1, 而且都不為0, 所以條件成立, 執行c=2 此時, a=2, b=1, c=2, d=4第二個if, |運算, 從左向右計算, 只要滿足乙個條件, 判定終止。 首先判定c是否等於3, 失敗(c的值是2, 不等於3), 從而判定第二個條件, 這個條件又是乙個賦值表示式, d變成了-1, 不為0, 判定結果為真, 整個if的條件為真, 所以執行a=5 此時, a=5, b=1, c=2, d=-1因此, 選擇b ps. 這是個很扣細節的題, 在現實中這麼寫會被人打死。 c語言 誰能講解一下選擇排序法以及有效排序。 11樓:帛建設雲風 用[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) 程式這東西要自己想,況且這個應該挺容易想出來的。。。 c語言 誰能講解一下選擇排序法以及有效排序。 12樓:網友 一般有兩種選擇排序法:(不明白有效排序具體要求是什麼?)一、冒泡法容易理解,但是效率低,主程式如下: for (i=0;ia[i+1]) // 以上程式的結果是將陣列的最大值放在最後; 在這個程式的基礎上再外迴圈n遍,就可以把陣列從小到大全排序。 二、雙迴圈 高效但是稍複雜: main() if(i!=p) printf("%d",a[i]); 本例程式中用了兩個並列的for 迴圈語句,在第二個for 語句中又巢狀了乙個迴圈語句。第乙個for 語。 句用於輸入10 個元素的初值。第二個for 語句用於排序。本程式的排序採用逐個比較的方法進行。 在i 次迴圈時,把第乙個元素的下標i 賦於p,而把該下標變數值a[i]賦於q。然後進入小迴圈,從a[i+1]起到最後乙個元素止逐個與a[i]作比較,有比a[i]大者則將其下標送p,元素值送q。一次迴圈結束後,p 即為最大元素的下標,q 則為該元素值。 若此時i≠p,說明p,q 值均已不是進入小迴圈之前所賦之值,則交換a[i]和a[p]之值。 此時a[i]為已排序完畢的元素。輸出該值之後轉入下一次迴圈。 對i+1 以後各個元素排序。 1 寫一個簡單選擇排序法的函式名,包含引數。int selectsort int listdata,int listlength 2 寫兩個迴圈,在迴圈中應用簡單選擇插入排序 int selectsort int listdata,int listlength int i j int length ... include void sort int a,int len int main c語言 若對任意n個數進行排序,應該如何操作?選擇排序法 從小到大排列10個數並輸出 include define n 10 可修改輸入個數void main printf 排序後 n for i 0 i 首先定義一個... p為結構 st的指標 陣列a 3 為結構 st的陣列 既有3個st,每個結構 st裡有2個元素,所以有6個數值 第三問 a為陣列a 3 第一個元素a 0 的地址 p a,將陣列a的地址賦值給p,p指向a 0 p x 即為a 0 x 樓主學結構應該知道 dt 0 指取dt 0 的地址 第二問 a 0 ...c語言怎樣通過函式呼叫實現選擇排序法
排序演算法c語言n個數字的排序,c語言 若對任意n個數進行排序,應該如何操作
C語言結構體題目,c語言結構體題目