c語言程式設計:選擇法排序
1樓:大野瘦子
#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;
2樓:1024程式設計師
c語言經典例子之選擇法排序。
3樓:哥們兒會_臭臭
選擇排序是一種簡單直觀的排序演算法。
工作原理:每一次從待排序的資料元素中選出最小(或最大)的乙個元素,存放在序列的起始位置,直到全部待排序的資料元素排完。
效能:選擇排序是不穩定的排序方法(比如序列[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語言 誰能講解一下選擇排序法以及有效排序。
4樓:帛建設雲風
用[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語言 誰能講解一下選擇排序法以及有效排序。
5樓:網友
一般有兩種選擇排序法:(不明白有效排序具體要求是什麼?)一、冒泡法容易理解,但是效率低,主程式如下:
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 以後各個元素排序。
c語言插入排序問題
6樓:聽不清啊
如果執行此函式,a陣列中小於a[0]的元素將會丟失。因為在迴圈中a[j+1]=a沒有機會執行。
函式修改如下:
原a陣列已是公升序時執行時間最少。a[10]=原a陣列已是降序時執行時間最多。a[10]=
c語言程式設計改錯,c語言程式設計改錯
include include float area float a,float b,float c 當子函式不在main函式之前的時候,這裡要有函式宣告 呼叫子函式不用加引數型別 float area float a,float b,float c 10 子函式應該有返回型別 include in...
c語言選擇題答案為c求解釋謝謝,C語言選擇題,答案為C,求解釋,謝謝。
答案是c沒問題 先打出studend,然後 b退後1位把游標移到d下面,再打t把d覆蓋了,再向後列印 r把游標移到這一行的開頭s下面,最後輸出s把s覆蓋了 我試了試,的確是s,不過你printf studend bt rs n 在他後面加一個換行就好了,因為列印輸出後面有個 請按任意鍵繼續.當你的 ...
c語言程式設計插入法排序,C語言程式設計插入法排序
貌似風輕 for j i j 11 j a j 1 b 你這步會把 a i 後面的數全變為 b include void main for i 0 i 10 i a i n 再將n插入 break 要用break結束 for i 0 i 11 i include stdio.h void sort ...