C陣列排序問題

2022-12-23 18:20:48 字數 1227 閱讀 3955

1樓:

這是個冒泡吧。。

思想很簡單 就是設定一個標誌i 這個i要從陣列的0元素遍歷到最後一個元素

每次遍歷的時候 都要保證i和前面的數都是有序的

如果遍歷到j的時候 j這個元素比j-1小了 那麼就交換j和j-1這兩個元素 在吧j向前移動並重覆上面的動作 直到j比j-1這個元素大了 那麼就表示第i個元素以前的元素都是有序的了

比如你可以看這個例子

2 7 4 9

第一次 i=0,可以保證第0個元素本身有序(只有一個元素所以肯定是有序的)

第二次 i=1,可以看到第0到第1個元素是也是有序的

第三次 i=2,這個時候 第2個元素小於第1個元素了於是開始調整

--先讓j=i也就是j=2,發線第2個元素"4"《第1個元素"7",於是交換4與7,並且j向前移動一位,也就是j=1了

--此時陣列變成了 2 4 7 9

--重複檢查,j=1的時候,第1個元素》第0個元素了,這個時候就能保證i=2的情況下第0到第2個元素都是有序的,則繼續i的遍歷

第四次 i=3,可以看到第3個元素》第2個元素,陣列為也是有序的

這樣整個排序就完成了

可以發現 每個元素都便利了一遍 最壞的情況每個元素都要向前移動n次

因此演算法複雜度為o(n^2) 這個排序是比較低效的

高效的排序你可以參考快速排序(quicksort)或是歸併排序(mergasort)他們的複雜度是o(nlogn)

2樓:匿名使用者

int iarray=;

氣泡排序從小到大

for(int i=0;iiarray[j])}}

3樓:匿名使用者

你是指pos = j = i吧?

這個應該是

j=i;

pos=j;

第二個解釋

當執行了 if (a[pos] > a[j]) pos = j 後pos=j,而j又是在for中遞加的,所以下面的if中,pos和i的值不是一直相等的

4樓:止天睿

關於第2個註釋:

for語句的初始語句只在迴圈前執行一次。

路過,不要分。

5樓:兔子長刺

第一個註釋的值是j的值賦值給pos,賦值符號是從右往左看的;

那是一個巢狀迴圈裡面的兩個if語句是順序結構,也就是說第一個執行第二個就不可能執行,兩者是互斥關係。

C 陣列排序問題

樓主把 用錯了,經過一次 i之後,i本身的值就會增加1的。for i 0 i 10 i for i 0 i 10 i for j 0 j 9 i j for i 0 i 10 i printf d t a i return 0 問題所在 if a i 原因在於 執行完 if a i 而o a i a...

c 中使用陣列對數值進行排序(選擇排序法)?

c 都幫你封裝好了 無腦呼叫sort函式就行了。c 中陣列的排序方法有哪些呢?除了氣泡排序 sort方法和reverse方法,c 還提供了許多其他的排序演算法和方法。下面對常用的排序方法進行簡要介紹 氣泡排序 bubble sort 氣泡排序是一種簡單的排序演算法,它通過比較兩個相鄰的元素,將較大的元素...

c語言陣列問題,C語言陣列問題

int main i for i 0 i 這個要問數學老師才知道。c語言陣列問題 你的 問題有以下幾個 1 min和max沒有初始化 2 對於a min 和a max 沒有做迴圈參考 如下 include main printf 最大數是 d,下標是 d,最小數是 d,下標是 d n a max m...