用選擇法對整數按由大到小的順序排序

時間 2021-08-11 18:00:45

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...

C語言 用選擇法對陣列中數按由大到小排序

問明 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...

c語言用選擇法對陣列中整數按由小到大排序

首先以array 0 作為參照,從左到右掃描,找到最小的資料與array 0 位置交換。接下來以array 1 作為參照,重複上述過程。k i定位參照 k j找到剩下陣列中最小值 k i是為了每次迴圈都從當前項開始呀。k j 不是你說的j k 是為了記錄後面的最小項,以方便替換。 從第i個數開始,比...