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