交換排序的基本思想是:對待排序資料元素,兩兩比較其關鍵字,若發現存在逆排序,則交換這兩個資料,一直到待排序資料元素中沒有逆序為止。
一、氣泡排序(bubble sort)
氣泡排序是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果它們的順序錯誤就把它們交換過來。走訪數列
的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢「浮」到數列的頂端。
演算法描述:假設資料元素存放陣列l中,初始時,有序為空,無序為l[0]~l[n-1];在無序區中,每次從頭到尾依次比較相鄰的兩個資料元素l[j]與l[j+1],
若存在逆序,則交換二者的位置。
動態演示:
程式:
void bubblesort(sqlist l, int n)
if(over) break;
} }}
二、快速排序
快速排序採用了分治法,即將原問題劃分成若干個規模更小但與原問題相似的子問題,然後遞迴解決這些子問題,最後再將它們組合形成原問題的解。
演算法描述:假設資料元素存放在陣列l中,當前序列為l[low]~l[upper],upper和low分別為序列的上下界;在序列中,任選乙個資料l[pivot]作為基準
元素;然後,依次從序列的兩端交替向序列**掃瞄,將序列中關鍵字小於l[pivot]的資料元素均移到pivot位置的左邊,將大於等於l[pivot]的資料元素均移到
pivot位置的右邊,這樣經過一趟快速排序之後,序列就被基準元素劃分為左、右兩個子串行l[low]~l[pivot-1]和l[pivot+1]~l[upper],並且左端子序列中
所有資料元素均小於基準元素,右端的子串行中所有資料元素均大於等於基準元素。
動態演示:
程式:
void quicksort(sqlist l, int low, int upper)
}int partition(sqlist, l, int i, int j)
while(i < j && pivot.key > l[i].key) i++;
if(i < j)
}l[i] = pivot;
return i;
}
經典內部排序之交換排序
經典內部排序演算法有交換排序 插入排序 選擇排序 歸併排序 分配排序。分類如下 交換排序 氣泡排序 快速排序。插入排序 直接插入排序 折半插入排序 希爾排序。選擇排序 直接選擇排序 堆排序。歸併排序 分配排序 基數排序 桶排序。本博文將介紹交換排序。一 氣泡排序 氣泡排序演算法的運作如下 比較相鄰的...
排序專題之交換排序
在交換排序這一類中,分為氣泡排序和快速排序,快速排序是建立在 氣泡排序基礎上的乙個優化,很有意義的乙個排序,在各種acm競賽 以及其他領域中經常被用到 接下來,我們先看一看氣泡排序。氣泡排序基本思想 通過無序區中相鄰記錄關鍵字間的比較和位置的交換,使關鍵字最小的記錄如氣泡一般逐漸往上 漂浮 直至 水...
排序演算法之交換排序
交換排基本思想 兩兩比較待排序元素的關鍵字,發現兩個元素的次序相反時即進行交換,知道沒有反序的元素為止。本節介紹兩種交換排序,即氣泡排序和快速排序。氣泡排序 每次只能和相鄰的位置數進行交換,效率低 include int a 100 void quicksort int left,int right...