1樓:錦繡江山千萬年
氣泡排序,是指計算機的一種排序方法,它的時間複雜度為o(n^2),雖然不及堆排序、快速排序的o(nlogn,底數為2),但是有兩個優點:1.「程式設計複雜度」很低,很容易寫出**;2.
具有穩定性,這裡的穩定性是指原序列中相同元素的相對順序仍然保持到排序後的序列,而堆排序、快速排序均不具有穩定性。不過,一路、二路歸併排序、不平衡二叉樹排序的速度均比氣泡排序快,且具有穩定性,但速度不及堆排序、快速排序。氣泡排序是經過n-1趟子排序完成的,第i趟子排序從第1個數至第n-i個數,若第i個數比後乙個數大(則公升序,小則降序)則交換兩數
2樓:帳號已登出
for(i=0;ia[j+1])}
3樓:匿名使用者
就是從第乙個數開始,依次和後面的數相比較,如果比他大(或者小),就和他換位置,再在新位置和旁邊的數比較,直到最後,然後再把最底下的向上比較,比到剛才冒出來的那個下面。就像水泡一樣,大的會從水底冒了出來。
4樓:南宮雲粼
就是像冒泡一樣,小的冒泡到大的,就是從前面開始挨著交換,每次把一組數中的最大的篩選到最後。
j**a 氣泡排序 不按順序排列 請問怎麼回事?
5樓:匿名使用者
class p;
sort(arr);
for (int x = 0; x < arr.length; x++)
}public static void sort(int arr) }}
}}執行結果:
6樓:暮影
您好.您在方法裡面寫錯了,不是:if(arr[x]>arr[y]),換成if(arr[y]>arr[y+1])試試
7樓:
你的輸出寫在排序前面,排好了你也不知道啊!
如何編寫乙個函式,完成對陣列氣泡排序?
8樓:匿名使用者
看這bai
個簡單du的程式zhi你dao就明白
版了!權
#include
void main()
printf("the sorted numbers:\n");
for(i=0;i<10;i++)
printf("%d",a[i]);
printf("\n");}
在所有排序方法中,關鍵字比較的次數與記錄的初始排列次序無關的 20
9樓:
a:希爾排序是按不同步長對元素進行插入排序,無序情況下步長大,在開始第一趟排序後,變得稍微有序,步長變短,直至排序成功,所以說有序比無序情況下的第一趟排序的初始步長小,排序趟數也少,所以比較次數少。
b:氣泡排序是將序列中值大的壓到序列頂端,就像冒泡一樣乙個乙個的將值大的冒出來。假設n個值,一趟排序後會將最大的排到位置n,然後對前n-1位進行第二趟排序,直至某一次排序中序列中的值是遞增的,排序結束。
所以說有序情況和無序情況儘管每一趟關鍵字比較次數相同,但有序情況下排序趟數要少,所以總比較次數也要小。
c:插入排序簡單,就是將記錄插入已經排好序的序列中。例如1至n為乙個序列,把1看作乙個有序序列a,將2至n各個值插入a中,必須要n-1趟操作(2與1比較,2大於1,序列變為1.
2,3與1.2比較,3大於2,序列變為1.2.
3,直至序列變為1.2.3.....
n).如果插入的序列2至n是有序的,則每趟操作的時候只需比較一次就可以得到有序序列。所以說插入排序最好條件下時(即有序條件下),關鍵字比較n-1次。
d:選擇排序,序列為1至n,第一趟是把2到n依次與1比較,把最小的放在位置1,第二趟是把3至n依次與2比較,把最小的放在位置2,迴圈以下操作,直至n-1趟後結束。它的次數是固定的,中途假如a與a+1至n比較後序列不變,而且有序,但後續比較還是要進行。
比如說1至n的序列關鍵字值就是1至n,它用插入排序是最簡單的,只需n-1次比較。但在選擇排序中,它會依次比較,不會因為已經有序停止,而是會依次的進行n-1趟操作。
10樓:匿名使用者
氣泡排序有一種優化方法,就是在每趟冒泡的時候都檢測這次是否有交換元素的順序,如果沒有交換就說明序列是排好序的,下次就不用再冒泡了!所以和初始序列是有關係的
11樓:匿名使用者
氣泡排序會在每一趟排序的for 迴圈首句放置乙個flag初始值為false;如果發生了交換,就讓flag=true,如果一趟結束之後flag 沒有變化,就說明表已經有序。排序結束。
12樓:亂取了這個名字
選擇排序無論它的初始順序是怎樣,它的比較次數都是n(n-1)/2.因為它是第乙個數與後面的所有數進行比較,找出最值與第乙個數進行互換,然後第二位數與後面所有數進行比較…因為它是數和其他數進行比較,比較期間不會判斷陣列的順序,所以在程式結束前,它不會因為陣列的順序而停止。
13樓:原來的源
我認為選d。插入排序(此處包括直接插入排序、折半插入排序、希爾排序)中,每一趟排序時,關鍵字比較次數和初始序列(是否有序)有關;氣泡排序也有關。而簡單選擇排序中,所有趟數下來關鍵字總是總共比較n(n-1)/2次,每一趟關鍵字比較次數也是固定的。
14樓:1026呵呵
折半插入排序中記錄比較次數與初始序列無關。每躺排序尋找位置時,折半次數一定
打擂法排序和選擇法排序是一回事嗎?
15樓:匿名使用者
打擂法排序與選擇排序不是一回事,但前者是後者的改進,打擂法排序也並不是什麼氣泡排序,在一些教科書中稱之為樹形選擇排序(注意不是排序樹),也叫錦標賽排序、勝者樹。思路類似於打擂台,打勝者進入下一輪,最後一場勝者是冠軍,敗者是亞軍。
16樓:流月星寒
打擂法排序:即氣泡排序 原理是:
1.比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。
2.對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。
3.針對所有的元素重複以上的步驟,除了最後乙個。
4.持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。
選擇法排序:每一趟從待排序的資料元素中選出最小(或最大)的乙個元素,順序放在已排好序的數列的最後,直到全部待排序的資料元素排完。
都是一輪排序選出當前陣列中最大或最小的數 然後遞迴進行....看原理似乎沒什麼差別對吧.........不過其實是有的..........
選擇是通過下標改動來排,冒泡則直接交換 就時間複雜度而言二者差不多 可能選擇會快一點點.........但是 冒泡是穩定的排序而選擇是不穩定的
另外:無論是冒泡還是選擇都不是什麼快的排序......
程式設計實現用氣泡排序法對有12個陣列元素一維整型陣列array[12]={96,35,12,58,78,90,587,21,0,-64,106,52}
17樓:山水阿銳
您好,這樣:
這個事公升序排列
int one = 0;
int two = 0;
int array = ;
for (int i = 0; i < array.length - 1; i++) }}
j**a冒泡題:使用氣泡排序法將陣列int array={55.2.6.4.32.12.9.73.26.37}中的元素 5
18樓:匿名使用者
氣泡排序
public void maopao(a[n])}}}
選者排序
public static void xuanzhe(int ary)}}}
19樓:你說的太對了丶我相信你丶真的
這個事公升序排列
int one = 0;
int two = 0;
int array = ;
for (int i = 0; i < array.length - 1; i++) }}
20樓:不知怎麼辦才好
首先你的陣列錯了應該是
int max=0;
int indexvalue=0;
int array=
for(int i=0 ;i<10;i++)for(int j=i;i<10;i++)}array[indexvaue]=array[i];
array[i]=max;}
c 氣泡排序法,C 氣泡排序方法
define true 1 define false 0 typedef int keytype typedef struct recordtype void bubblesort recordtype r,int length include void reversal int x,int n i...
用指標實現氣泡排序,用指標方法完成氣泡排序函式。
相當地彆扭 我覺得利用指標來移動,而不是通過 i j 這兩個下標 define null 0 void orderbypointer const int array while p1 null if length 0 for int i 0 i p2 p2 這樣會不會好點?也沒見著有多麻煩啊.這不挺...
寫出氣泡排序選擇排序插入排序歸併排序快速排序在最壞最壞及平均情況下的時間複雜度
氣泡排序,選擇排序,插入排序一般情況下要經過兩次迴圈,每次迴圈必須經歷時則需要o n 2 而歸併排序,快速排序則是o n log2 n 而最壞情況下,快速排序會變成o n 2 其餘不變 優化除外 望採納!以下排序演算法最壞情況下時間複雜度最低的是 a.氣泡排序 b.插入 c.選擇 d.快排 在氣泡排...