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

2022-06-03 18:30:05 字數 5008 閱讀 5119

1樓:

必須要k吧.

注意到k有兩個地方被賦值,k=i和if(array[j]

選擇法效率比較低,使用冒泡法應該更容易理解一些,且效率更高.

2樓:

需要k的,k的作用是標記陣列中最小的那個數,因為選擇排序每次選擇後最小的數都被交換到前面,所以假設第i個數為最小的數依次和後面的數進行比較,如果有更小的則把該數的下標賦值給k,最後得到最小的那個和第i個交換,小的數就到前面去了,然後就從第i+1個數開始選擇最小的那個數,迴圈幾次就完成排序了~~

3樓:巴土斯

我建議你,用你的想法,把這個過程改了,然後給十個數讓程式執行試一下,你的體會就更好了。

我的回答是,k是存放內層for迴圈中最小數的下標,每迴圈一週,挑出最小的數,按外層for迴圈的下標儲存;

沒有k,兩個數比較,如何換位置,必須有第三個空間中轉。你再體會一下

4樓:匿名使用者

赫赫~~~~~~~~

i是從0到n-1的迴圈

j是從i+1到n的迴圈

k是i的每一次迴圈中,依次取出i到n-1某個數來和j比較的游標,當然不可少.

因為你的陣列是整數,所以只有t是不必要的,完成k和i的交換只需要這句array[i]^=array[k]^=array[i]但可讀性不好.

5樓:o喜陽陽

當然需要k了,雖然if判斷的是ij的大小於k無關,可是下面交換是只有小的才交換啊,也就是無論是i還是j誰小誰付給k進行交換!

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

6樓:問明

#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 select_sort(int arry,int n)   //形參arry是陣列名

int i,j,k,t;

for(i=0;i<=n-1;i++)

k=i;

for(j=i+1;jif(arry[j]k=j;

t=arry[k];

arry[k]=arry[i];

arry[i]=t;

執行結果:

7樓:聽不清啊

#include

int main()

for(i=0;i<10;i++)

printf("%d ",a[i]);

printf("\n");

return 0;}

8樓:倜瀤

#include "stdio.h" main() for(i=0;i<10;i++) printf("%d",a[i]); }

c語言,用選擇法對陣列中10個整數按從小到大的順序排序

9樓:匿名使用者

int i , j ,min ;

for ( i = 0 ; i < n-1 ; i ++ ){min = i ;

for ( j = i ; j < n ; j ++ ){if (arr[j]

10樓:匿名使用者

我寫的標準演算法,請參考

c語言程式編寫,用選擇法對10個實數由小到大排序

11樓:匿名使用者

main()

for(i=0;i<10;i++) // 輸出陣列printf("%d",a[i])}

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

12樓:

我都不知道說什麼好!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的合法語句體現這種思想,所以必須把乙個功能模組整體觀察……

13樓:夜獨行孤單

int i , j ,min ;

for ( i = 0 ; i < n-1 ; i ++ )int temp = arr[ i ] ;

arr[ i ] = arr [ min ] ;

arr[ min ] = temp;}

14樓:謇蕊郟冬梅

太奇葩了吧?再把k=i改成d=i,把if(array[j]

c語言,用選擇法對陣列中10個整數按由小到大排序?求解釋!!!

15樓:匿名使用者

首先以array[0]作為參照,從左到右掃瞄,找到最小的資料與array[0]位置交換。

接下來以array[1]作為參照,重複上述過程。

。。。k=i定位參照

k=j找到剩下陣列中最小值

16樓:匿名使用者

k=i是為了每次迴圈都從當前項開始呀。

k=j(不是你說的j=k)是為了記錄後面的最小項,以方便替換。

17樓:匿名使用者

從第i個數開始,比較後面的數,把最小的和第i個交換當i=0時,交換完成,a[i]就是從第0個開始到最後乙個中最小的那個當i=1時,交換完成,a[i]就是從第1個開始到最後乙個中最小的那個.......

k是最小數的下標,然後a[k]和a[i]的數字交換,a[i]就是最小的了

18樓:匿名使用者

如程式所給出的sort函式,k=i是為了設定每次排序的開始,是參照點;j=k呢,就是將此輪比較中最小的個數賦值給陣列中的第i個,完成此次選擇中最小數的選擇。第一次排序從陣列中第乙個數開始,通過比較,確定最小的數,並通過t=array[k];array[k]=array[i];array[i]=t;

,完成賦值給a[o].以此類推,第二次由陣列中第二個陣列元素開始,也就是a[1]開始,比較陣列中以下元素的大小,選擇出餘下元素中最小的,賦值給a[1],完成此次選擇。以此類推,得到乙個完整有序的陣列。

其中,比較次數分別為n-1,n-2,n-3、、、總次數為(n-1)n/2。你仔細想一下就會出來的。。。:-d

19樓:改心水

選擇排序的思想是:每一趟的排序過程都是在當前位置後面剩下的待排序物件中選出值最小的那個,然後放到當前位置上。

該程式中k的定義主要是為了存放陣列中最小數的位置。然後通過t=array[k];array[k]=array[i];array[i]=t;這三條語句,再把這陣列中最小的數字放到前面。注意c語言當中的「=」不是等於,只是一種賦值運算。

其中if(array[j]

20樓:匿名使用者

1、i=0, k=0,j=1,如果array[1]和array[0]比較,然後"k=1 t=array[k];array[k]=array[i];array[i]=t;"

表示將array[0]和array[1]較小的值賦給array[0];然後再將array[1]和array[2]作比較,將

較小的賦給array[0],如此類推,最後將最大值賦給array[0];

2、i=1, k,j重新賦值,按照1的結論將把除array[0]之外的所有值中最大的賦給array[1];

3、以此類推,將array公升序排列。

空函式sort 讓 k=i是為了只比較除最大數值之外的數值,k=j是為了在array[j]=array[k],則不用k=j,直接將小值賦給array[i]。

不知道你能不能看懂 哈哈

c語言如何用選擇法排序任意輸入十個數(從大到小、從小到大)?

21樓:答虎多高峻

#include

main(void)

}printf("排序後的陣列為:\n");

for(j=0;j<10;j++)

printf("%d

",a[j]);}

C語言 編寫函式用氣泡排序法對陣列中的資料進行從小到大的排序

int i,j,temp for i 0 ia j 1 之間寫這個 編寫函式用氣泡排序法對陣列中的n個資料進行從小到大的排序。1 新建乙個163.php。2 輸入php網頁的結構 3 宣告php與瀏覽器互動的檔案型別和編碼。4 使用 array 函式定義乙個 numbers陣列。5 使用 sort ...

C中陣列疑惑,C語言陣列問題

陣列有分動態陣列和靜態陣列 動態陣列,是指數組的元素個數,不是宣告的時候就定下來,比如int a new int i 這裡的i也是變數,有可能為1,也可能為10。靜態陣列,是指宣告的時候,元素的個數就確定下來了,比如int a 10 c語言中都是靜態陣列,c 中才有動態陣列的概念。樓主所說的並不是我...

c語言關於陣列中0和的儲存問題,C語言關於陣列中0和 0 的儲存問題

只能佔用4 個 第五個要留給 0 a 4 0 和 a 4 0 這倆一樣 0 ascii 碼 0 a 4 0 這樣的 0才是ascii碼48 不要被那些人誤導 首先乙個字串的話末尾是必須要有 0的 否則會越界,這樣的後果就是程式會有bug,如果你的陣列有5個空間的話,最後乙個一定要留給 0至於a 4 ...