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

2022-08-26 01:05:24 字數 6284 閱讀 2066

1樓:聽不清啊

程式是好的。正常執行:

#include

int main()

void sort(int arry,int n);

int a[10],i;

printf("enter array:\n");

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

scanf("%d",&a[i]);

sort(a,10);

printf("the sorted array:\n");

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

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

printf("\n");

return 0;

void sort (int array,int n)int i,j,k,t;

for(i=0;ik=i;

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

t=array[k];array[k]=array[i];array[i]=t;

2樓:匿名使用者

如程式所給出的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

3樓:匿名使用者

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

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

4樓:匿名使用者

快排、二叉樹 這兩個比較難,還可以使用指標定位。

-itjob

5樓:匿名使用者

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]。

不知道你能不能看懂 哈哈

6樓:改心水

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

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

其中if(array[j]

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

7樓:匿名使用者

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

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

。。。k=i定位參照

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

8樓:匿名使用者

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

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

9樓:匿名使用者

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

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

10樓:匿名使用者

如程式所給出的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

11樓:改心水

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

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

其中if(array[j]

12樓:匿名使用者

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語言,用選擇法對陣列中10個整數按由小到大排序

13樓:匿名使用者

d=k=i; 不能這樣寫,要分開來:

k=i;

d=i;

14樓:匿名使用者

這個還是冒泡法 ~

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

15樓:問明

#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;

執行結果:

16樓:聽不清啊

#include

int main()

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

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

printf("\n");

return 0;}

17樓:倜瀤

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

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

18樓:匿名使用者

int i , j ,min ;

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

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

19樓:匿名使用者

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

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

20樓:

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

21樓:夜獨行孤單

int i , j ,min ;

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

arr[ i ] = arr [ min ] ;

arr[ min ] = temp;}

22樓:謇蕊郟冬梅

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

c語言用選擇法對10個整數按從大到小排序。10個整數用scanf函式輸入。利用陣列

23樓:樂跑小子

#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看哈哪裡不對,謝了

for j 0 j 9 j 這一段 出問題了 第二個for迴圈 k j 1 不應該是 k i 1 這個問題的確不好找哈,其次if 判斷後面的 三條語句都該屬於 if 掌控範圍 就是說加上大括號,或者前兩條語句後面用逗號代替分號,不然 當if 不成立時,只是第一條語句不執行,後兩條語句還是執行的,基於...

C語言,編寫函式,函式是用選擇排序法將陣列排序

px 10 改為 px a 編寫函式,使用選擇排序法對陣列進行排序 用c語言 include include include int main void if i tmp for i 0 i 10 i printf 3d a i printf n return 0 隨機產生陣列中的元素,更合理一些。...

編寫程式,從鍵盤輸入整數,要求用選擇法和冒泡法將它們按

冒泡法排序 include stdio.h define n 10 main int a n int i,j,temp for i 0 i擇排序 include stdio.h define n 10 main int a n int i,j,p,temp for i 0 i 編寫一個程式,要求從鍵...