插入、氣泡排序的速度較慢,但參加排序的序列區域性或整體有序時,這種排序能達到較快的速度。
反而在這種情況下,快速排序慢了。
當n較小時,對穩定性不作要求時宜用選擇排序,對穩定性有要求時宜用插入或氣泡排序。
若待排序的記錄的關鍵字在乙個明顯有限範圍內時,且空間允許時用桶排序。
當n較大時,關鍵字元素比較隨機,對穩定性沒要求宜用快速排序。
當n較大時,關鍵字元素可能出現本身是有序的,對穩定性有要求時,空間允許的情況下宜用歸併排序。
當n較大時,關鍵字元素可能出現本身是有序的,對穩定性沒有要求時宜用堆排序。
1.氣泡排序(bubble sort)
好的,開始總結第乙個排序演算法,氣泡排序。我想對於它每個學過c語言的都會了解的吧,這可能是很多人接觸的第乙個排序演算法。
(1)演算法描述:氣泡排序是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果它們的順序錯誤就把它們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢「浮」到數列的頂端。
(2)演算法描述和實現 具體演算法描述如下:
<1>.比較相鄰的元素。如果第乙個比第二個大,就交換它們兩個;
<2>.對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對,這樣在最後的元素應該會是最大的數;
<3>.針對所有的元素重複以上的步驟,除了最後乙個;
<4>.重複步驟1~3,直到排序完成。
(3)演算法分析;最佳情況:t(n) = o(n) 當輸入的資料已經是正序時(都已經是正序了,為毛何必還排序呢....)
最差情況:t(n) = o(n2) 當輸入的資料是反序時(臥槽,我直接反序不就完了....) 平均情況:t(n) = o(n2)
#include
//氣泡排序演算法
void bubblesort(int *arr, int n) ;
int n = sizeof(arr) / sizeof(int);
bubblesort(arr, n);
printf("排序後的陣列為:
\n");
for (int j = 0; jprintf("%d ", arr[j]);
printf("\n");
return 0;
氣泡排序改進1,新增標誌位,如果某一次排序中出現沒有交換位置,說明排序完成
void maopao(int a,int n)
if(flag==0)
break;}}
int main()
//氣泡排序改進
2,新增標誌位,記錄最後一次交換位置的地方,證明最後一次交換位置之後的地方時排好序的,下一次只需要排最後一次之前的地方就好了
void maopao(int a,int n)
flag=pos;
}
}
int main()
冒泡改進3,傳統冒泡每趟排序遍歷一次找到乙個最大值或者最小值,如果每趟遍歷兩次就會找打乙個最大值和乙個最小值,減少了一半的排序趟數
void maopao( int r, int n)
--high; //修改
high值,
前移一位
for ( j=high; j>low; --j) //反向冒泡
,找到最小者
if (r[j]
++low; //修改
low值
,後移一位
}
}int main()
氣泡排序 bubble sort
氣泡排序是最基本的排序演算法,常被做為內部排序的第乙個排序演算法進行講解。它的原理非常簡單,只是一 個兩層迴圈,每次將最大或最小的放到陣列最後。演算法如下 b為陣列的起始位置,e為陣列的結果位置 int bubble int data,int b,int e return n 這個函式返回兩個整數比...
氣泡排序(Bubble Sort)
無論你學習哪種程式語言,在學到迴圈和陣列時,通常都會介紹一種排序演算法來作為例子,而這個演算法一般就是氣泡排序。並不是它的名稱很好聽,而是說這個演算法的思路最簡單,最容易理解。因此,哪怕大家可能都已經學過氣泡排序了,我們還是從這個演算法開始我們的排序之旅。氣泡排序 bubble sort 一種交換排...
氣泡排序 Bubble Sort
維基百科 氣泡排序 演算法思想 不斷的交換相鄰的兩個反序元素,使最小元素 上浮 或使最大元素 下沉 每一趟 冒泡 都會確定乙個最大的元素或最小的元素,同選擇排序類似,演算法總共只需進行n 1趟。將乙個陣列豎著放,低位址在上面,高位址在下面,所謂 上浮 就是較小的元素不斷向低位址靠近,所謂 下沉 就是...