1樓:匿名使用者
選擇法的原理是將每一個元素與他後面的元素分別比較,如果有比他大的,則交換,所以有2重迴圈,第一重是參加比較的元素,第二重是參加比較的元素分別與後面(這個記住,是他後面的元素,關鍵是後面二字)的元素分別比較
void sort(int x,int n//交換}}
這樣就可以理解了,假設陣列有n個元素,那麼當:
i=0,最多要比較n-1次
i=1;最多比較n-2次
i=2;最多比較n-3次
......
i=n-2,最多比較1次,樓主可以自己去算算,選擇法最多要比較多少次,這個問題是考試和麵試中經常問到的問題,祝你進步!
2樓:匿名使用者
程式中幾個變數的意義差不多就是一樓的解釋,但這個演算法太羅嗦了,直接冒泡法交換就行了,繞來繞去的。
void sort(int x,int n)}}
3樓:
i是當前開始查詢的位置;j是代表從i的下一個位置開始比較;k是記錄從i起之後最大數的位置;
第一個迴圈是指定開始查詢位置 i ;第二個循是得出 i 位置 之後最大數位置;顯然,i=0迴圈結束後,最大的放到了第一位;i=1迴圈後次大的放在了第二位 ...
編寫程式,用選擇法對10個整數按從小到大順序排序
4樓:倒黴熊
#include
void sort(int array,int n)//for
if(k!=i)}}
int main()
;int i;
printf("before\n");
for(i=0;i<10;i++)
sort(a,10);
printf("\nafter\n");
for(i=0;i<10;i++)
return 0;}
c語言:指標 用選擇法對10個整數由大到小順序排序
5樓:匿名使用者
k=j沒問題,問題在別的地方
void inv(int * x,int n)//這裡交換k,i指向版的值,不權是j指向的值}}
c語言用選擇法對10個整數按從大到小排序。10個整數用scanf函式輸入。利用陣列
6樓:樂跑小子
#include//標準輸入輸出函式呼叫需要此標頭檔案、就是那個printf和scanf函式要用的
void main()//主函式
//讀取資料函式
printf("\n"); //換行for(i=1;i<=9;i++) //比較10個資料printf("\n從大到小排列是:\n"); //輸出字元for(i=10;i>=1;i--) //迴圈輸出按大小排列的資料
printf("%5d",a[i]);
printf("\n");//每輸出一個資料換行}
7樓:丫丫
該程式功能:用選擇法對10個整數按升序排序。
#include
#define n 10
void main()
;printf("\nthe array is:\n"); /* 輸出陣列元素 */
for (i=0;ia[j]) min =j;
temp=a[min]; a[min]=a[i]; a[i]=temp; /* 資料交換 */
}printf("\nthe sorted numbers: \n"); /* 輸出排序結果 */
for (i=0;i printf("%5d",a[i]); printf("\n");} 8樓: #include #define n 10 void main() printf("\nthe sorted numbers: \n"); /* 輸出排序結果 */ for (i=0;i printf("%5d",a[i]); printf("\n");} 9樓:匿名使用者 #include int main() printf("\n"); printf("the orginal numbers:\n"); for(i=0;i<10;i++) printf("%5d",a[i]); printf("\n"); for(i=0;i<10;i++) printf("\nthe sorted numbers:\n"); for (i=0;i<10;i++) printf("%5d",a[i]); printf("\n"); return 0;} 用選擇法對10個整數排序。10個整數用scanf函式輸入。 10樓:問明 #include void main() int i,j,min,temp,a[11]; printf("enter data;\n"); for(i=1;i<=10;i++) scanf的功能用一句話來概括就是「通過鍵盤給程式中的變數賦值」。該函式的原型為: #include int scanf(const char*format,...); 它的用法,或者說有兩種格式。 scanf("輸入控制符",輸入引數); 例子:#include int main(void) int i; i=10; printf("i=%d\n",i); return 0; 11樓:匿名使用者 /**/ # include //輸入整型資料 void input_num(int *a); //降序排列並輸出 void sort_and_show(int * a); //輸出陣列 void show(int * a); int main(void) void input_num(int *a)}void sort_and_show(int * a)}}//排序後輸出 show(a); return; }void show(int * a) printf("\n"); return;}/* 輸出結果: ---- .......你的資訊....... 請輸入10個整型資料: 78 88 99 6 5 2 4 44 55 20降序排列並輸出 99 88 78 55 44 20 6 5 4 2------*/ 12樓:莞爾°落 用冒泡法解決挺方便的,程式如下: #include void main() for(i=0;i<10;i++) printf("%d",a[i]);} 13樓:匿名使用者 #include void sort(int* a, int n)}}}void output(int* a,int n)void input(int* a,int n)int main() 14樓:匿名使用者 main() 在tc環境下執行一下,看看是不是你想要的結果。 15樓:匿名使用者 #include void sort(int data)//選擇法10個整數排序temp=data[i]; data[i]=data[index]; data[index]=temp;}} int main() 選擇法排序函式是sort()已經編寫了。可以執行,已經測試了。 16樓: #include using namespace std; #define size 10 void main() ;for(i=1;i<=size;i++)cin>>a[i]; for(i=1;i<=size;i++) cout
a[0]=a[i]; a[i]=a[min]; a[min]=a[0];}} for(i=1;i<=size;i++) cout<
cout< 17樓:o破天 #include main() for(i=0;i<10;i++) printf("%d ",a[i]);} c語言用選擇法對10個整數按從大到小排序。10個整數用scanf函式輸入。 18樓:樂跑小子 #include//標準輸入輸出函式呼叫需要此標頭檔案、就是那個printf和scanf函式要用的 void main()//主函式 //讀取資料函式 printf("\n"); //換行for(i=1;i<=9;i++) //比較10個資料printf("\n從大到小排列是:\n"); //輸出字元for(i=10;i>=1;i--) //迴圈輸出按大小排列的資料 printf("%5d",a[i]); printf("\n");//每輸出一個資料換行} c語言,用選擇法對陣列中10個整數按由小到大排序 19樓: 我都不知道說什麼好!i是外迴圈計數變數,由它來安排後面的j迴圈從**開始,所以第i以前的都已經排好序了,這說明i只能一次增1來遍歷陣列。正因為如此,所以才安排一個臨時變數k來記錄第i以後的所有元素值中最小(或最大)值的下標,以不影響i按部就班地遍歷整個陣列(最後一個元素可以不包括,因為j是從i+1開始的;當然包括了也不錯,只是多作一次迴圈判斷罷了)。 你倒好,還在迴圈體中對i進行干預!你以為k=i了兩者就一樣了?k=i只是在每一輪迴圈開始時讓k的初值等於i(選擇法演算法要素之一),而兩者的功能完全不同: i在當前一輪迴圈中不能改變,是要準備把i以後的元素中最小值拿來與i下標的元素比較看是否應該交換;而k是隨i以後的元素值的大小而遊走的,總是記錄著i以後的元素中當前最小值(或最大值)的下標。你把i當k用,隨時更改它的值,那外迴圈還能正常進行嗎?排序演算法過程全是在外迴圈正確程序下才***,外迴圈被人為擾亂了,其中的演算法還能正常? 況且,外迴圈中還有i++!比如:當前i==5,那麼正常時下一輪應該是i==6;可你內迴圈把i當臨時變數k使,倘若array[9]是最小的,那麼i立馬被賦值為9了,……程序退到外迴圈由於i++的作用i就是10了,那麼i 看**首先要理解**思想,再研究怎麼用c的合法語句體現這種思想,所以必須把一個功能模組整體觀察…… 20樓:夜獨行孤單 int i , j ,min ; for ( i = 0 ; i < n-1 ; i ++ )int temp = arr[ i ] ; arr[ i ] = arr [ min ] ; arr[ min ] = temp;} c語言,用選擇法對陣列中10個整數按從小到大的順序排序 21樓:匿名使用者 int i , j ,min ; for ( i = 0 ; i < n-1 ; i ++ ){min = i ; for ( j = i ; j < n ; j ++ ){if (arr[j] 22樓:匿名使用者 我寫的標準演算法,請參考 聽不清啊 因為你輸出的順序是a,b,c,d,而比較交換的策略是,如果前面的值小於後面的值就交換兩個變數的值 前面變數的值大則不交換 所以就是大的在前,小的在後了。並沒有從小到大啊? 你可以利用 c 標準庫 stdlib.h 裡的 qsort 完成任何型別的陣列的快速排序 include includ... 問明 include using namespace std int main void select sort int arry,int n int a 10 i for i 0 i 9 i cin a i cout for i 0 i 9 i 輸出10個已經排好序的數 cout void sel... 首先以array 0 作為參照,從左到右掃描,找到最小的資料與array 0 位置交換。接下來以array 1 作為參照,重複上述過程。k i定位參照 k j找到剩下陣列中最小值 k i是為了每次迴圈都從當前項開始呀。k j 不是你說的j k 是為了記錄後面的最小項,以方便替換。 從第i個數開始,比...輸入整數,要求按由大到小的順序輸出
C語言 用選擇法對陣列中數按由大到小排序
c語言用選擇法對陣列中整數按由小到大排序