C語言排序問題,c語言的兩種排序?

2022-12-26 13:06:20 字數 4808 閱讀 4439

1樓:

你的分太少了,又要想演算法,又要程式設計,追分吧。

c語言的兩種排序?

2樓:

下面是c語言裡面常用的三種排序方法,但願對樓主有幫助,

一、冒泡法(起泡法)

演算法要求:用起泡法對10個整數按公升序排序。

演算法分析:如果有n個數,則要進行n-1趟比較。在第1趟比較中要進行n-1次相鄰元素的兩兩比較,在第j趟比較中要進行n-j次兩兩比較。

比較的順序從前往後,經過一趟比較後,將最值沉底(換到最後乙個元素位置),最大值沉底為公升序,最小值沉底為降序。

演算法源**:

# include

main()

/*輸出排序結果*/

printf("the sorted numbers: ");

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

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

printf("\n");

}演算法特點:相鄰元素兩兩比較,每趟將最值沉底即可確定乙個數在結果的位置,確定元素位置的順序是從後往前,其餘元素可能作相對位置的調整。可以進行公升序或降序排序。

演算法分析:定義n-1次迴圈,每個數字比較n-j次,比較前乙個數和後乙個數的大小。然後交換順序。

二、選擇法

演算法要求:用選擇法對10個整數按降序排序。

演算法分析:每趟選出乙個最值和無序序列的第乙個數交換,n個數共選n-1趟。第i趟假設i為最值下標,然後將最值和i+1至最後乙個數比較,找出最值的下標,若最值下標不為初設值,則將最值元素和下標為i的元素交換。

演算法源**:

# include

main()

printf("the sorted numbers: ");

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

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

printf("\n");

}演算法特點:每趟從無序序列中取出第乙個數插入到有序序列的合適位置,元素的最終位置在最後一趟插入後才能確定位置。也可是先用迴圈查詢插入位置(可從前往後或從後往前),再將插入位置之後的元素(有序列中)逐個後移乙個位置,最後完成插入。

該演算法的特點是在尋找插入位置的同時完成元素的移動。因為元素的移動必須從後往前,則可將兩個操作結合在一起完成,提高演算法效率。仍可進行公升序或降序排序。

二、下面是三種排序的概念及其優缺點

氣泡排序

已知一組無序資料a[1]、a[2]、……a[n],需將其按公升序排列。首先比較a[1]與a[2]的值,若a[1]大於a[2]則交換兩者的值,否則不變。再比較a[2]與a[3]的值,若a[2]大於a[3]則交換兩者的值,否則不變。

再比較a[3]與a[4],依此類推,最後比較a[n-1]與a[n]的值。這樣處理一輪後,a[n]的值一定是這組資料中最大的。再對a[1]~a[n-1]以相同方法處理一輪,則a[n-1]的值一定是a[1]~a[n-1]中最大的。

再對a[1]~a[n-2]以相同方法處理一輪,依此類推。共處理n-1輪後a[1]、a[2]、……a[n]就以公升序排列了。

優點:穩定,比較次數已知;

缺點:慢,每次只能移動相鄰兩個資料,移動資料的次數多。

選擇排序

已知一組無序資料a[1]、a[2]、……a[n],需將其按公升序排列。首先比較a[1]與a[2]的值,若a[1]大於a[2]則交換兩者的值,否則不變。再比較a[1]與a[3]的值,若a[1]大於a[3]則交換兩者的值,否則不變。

再比較a[1]與a[4],依此類推,最後比較a[1]與a[n]的值。這樣處理一輪後,a[1]的值一定是這組資料中最小的。再將a[2]與a[3]~a[n]以相同方法比較一輪,則a[2]的值一定是a[2]~a[n]中最小的。

再將a[3]與a[4]~a[n]以相同方法比較一輪,依此類推。共處理n-1輪後a[1]、a[2]、……a[n]就以公升序排列了。

優點:穩定,比較次數與氣泡排序一樣,資料移動次數比氣泡排序少;

缺點:相對之下還是慢。

插入排序

已知一組公升序排列資料a[1]、a[2]、……a[n],一組無序資料b[1]、b[2]、……b[m],需將二者合併成乙個公升序數列。首先比較b[1]與a[1]的值,若b[1]大於a[1],則跳過,比較b[1]與a[2]的值,若b[1]仍然大於a[2],則繼續跳過,直到b[1]小於a陣列中某一資料a[x],則將a[x]~a[n]分別向後移動一位,將b[1]插入到原來a[x]的位置這就完成了b[1]的插入。b[2]~b[m]用相同方法插入。

(若無陣列a,可將b[1]當作n=1的陣列a)

優點:穩定,快;

缺點:比較次數不一定,比較次數越少,插入點後的資料移動越多,特別是當資料總量龐大的時候,但用鍊錶可以解決這個問題。

3樓:**設御午

key)

a[i+1]=key,j++)

希望給你點啟發

4樓:天平座de魚

心語的眼淚的兩種排序的話還是比較考驗人性的,我覺得。

5樓:匿名使用者

c語言排序細分不僅兩種。。。

6樓:紅塵風雨n百年

氣泡排序和選擇排序?

c語言排序問題。

7樓:漆菊藺聽春

最後應該是按從小到大的順序輸出陣列a中的10個數

8樓:止絹秋沛凝

括號的作用就是把括號中的語句都包含進迴圈體內

如果沒有括號的話

那麼迴圈就只執行迴圈語句後面的一條語句

9樓:直角世界的部落格

不一樣。打擂台是每次比出乙個最大的拿掉,剩下的接著比,最大的第乙個被確定;

冒泡則是每次只交換相鄰的,直到順序正確,如果最大的排在末尾,可能要經過很多很多次迴圈才能交換到隊首。

c語言排序問題

10樓:

這幾個if語句是獨立的,互相沒有關係;但後面的if中用的變數值是前面的if語句操作以後的值。

第二張**的中最後的if(x

11樓:wm死神永生

老哥你這程式的目的是?另外建議你把《換成<=,否則出現相等的情況就執行不下去了。對於第二個問題,如果x

12樓:匿名使用者

沒有吧 好像沒巢狀 ?(pascal狗路過) 不過我似乎看懂了?

第二個if裡的y的值是經過第乙個if語句處理過的

c語言分類排序問題

c語言氣泡排序問題

c語言選擇法排序問題

13樓:匿名使用者

這個問題可以設想如果陣列就是從小到大的,會發生什麼情況:如果就是從小到大的陣列,if 語句沒用了,那麼直接執行a[ipos]=a[i], 這就會出現問題了,如果你沒 對ipos賦值,那麼程式會報錯,如果對ipos賦值,那麼該賦什麼值?毫無疑問是i,如果和i不同,那麼意味著每次迴圈a 陣列中ipos處的值都要改變為a[i],而a 就是從小到大的不需要改變,也會出問題。

再看一下你這個程式6為什麼沒了?

因為你這個陣列比較特殊,10到1遞減的,所以第1次排序是10和1對換,ipos=9;即1所在的位置。

第2次是9和2對換ipos=8;即2所在的位置

第3次是8和3對換ipos=7;即3所在的位置

第4次是7和4對換ipos=6;即4所在的位置

第5次是6和5對換ipos=5;即5所在的位置

注意在第5次排序之後已經得到從小到大的陣列了:1、2、3、4、5、6、7、8、9、10;

正常情況下後面的排序不會影響結果了。

後面的6、7、8、9、10再排序,這就和剛開始說的情況一樣了,這些本來就是從小到大的,if語句沒用了,那麼也就意味著ipos不會改變了,而上面執行到ipos=5,所以後面每次迴圈執行a[ipos]=a[i],把i 處的值賦給a[ipos],也就是賦給a[5], 而a[5]的值是6,就是說後面每次排序會把6、7、8、9、10替換6最終的結果是a[5]=10,6沒了。

所以可以看到如果當前迴圈i處a[i]就是最小值,是不需要進行替換操作的。但是如果不設定ipos=i,會導致執行a[ipos]=a[i],改變a[ipos]的值。

14樓:結構體神經

如果itemp不被賦值的話,那下面的if(a[j]

15樓:1024程式設計師

c語言經典例子之選擇法排序

c語言 簡單的從大到小排序問題

16樓:擁抱

這是氣泡排序法。

第乙個迴圈的控制變數應該是 i < n - 1 ,也就是 兩兩比較的 前乙個數 最多隻到 倒數第二個;

而 第二個 迴圈的控制變數應該是  j < n ,表示 兩兩比較的後乙個數, 要直到最後乙個數。

如有幫助,煩請點採納,謝謝!

c語言字母排序問題

17樓:

很有意思題……今天太晚了,明天給你做吧

btw,樓主是哪個學校的,現在國外大學這樣學c的好像不多了...

18樓:雨過天晴日丶

#include

#include/*string包含gets,puts,strlen函式*/

void main()

}puts(n);/*輸出排序後的字元陣列n*/}在vc++6.0執行了下,可以。

C語言快速排序比較次數問題c語言,快速排序,在最壞條件下需要比較的次數為多少

你可以用氣泡排序法自己試一試 目的 按要求從大到小或從小到大排序。基本思路 對尚未排序的各元素從頭到尾依次依次比較相鄰的兩個元素是否逆序 與欲排順序相反 若逆序就交換這兩元素,經過第一輪比較排序後便可把最大 或最小 的元素排好,然後再用同樣的方法把剩下的元素逐個進行比較,就得到了你所要的順序。可以看...

C語言氣泡排序原理,C語言氣泡排序。

include void main printf the sorted numbers n for i 0 i 10 i printf d a i 氣泡排序演算法的運作 1 比較相鄰的元素。如果第乙個比第二個大 小 就交換他們兩個。2 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。這步...

C語言關於結構體排序要用qsort

排序方法有很多種,選擇排序,氣泡排序,歸併排序,快速排序等。看名字都知道快速排序 是目前公認的一種比較好的排序演算法 我沒聽書速度比這快的了,特殊場合例外 比選擇排序,氣泡排序都要快。這是因為他速度很快,所以系統也在庫裡實現這個演算法,便於我們的使用。這就是qsort。qsort 要求提供一個 比較...