排序分為內部排序和外部排序,內部排序是指待排序的資料都是在記憶體中的,例如陣列;外部排序指待排序資源在記憶體外,例如對檔案的排序。此篇說的是內部排序。通俗地來說,內部排序就是將一堆資料按一定規則對它進行排序。排序又分為穩定排序和不穩定的排序,如果初始序列ai,ak有序(ai = ak),排序後變成了ak,ai,稱為不穩定排序。下面介紹幾個經典常見的排序。(以下排序都是以陣列為例進行排序)
1.選擇排序
思路就是每次從待排序列取出最大或最小的值的元素,插入到以有序的序列後邊。
void select_sort(int a, int n)
}
2.直接插入排序從待排序列中遍歷元素(不需要做對比,直接從取第乙個元素即可),將選中元素按順序插入到以排序的序列中。
void insert_sort(int a, int n)
a[j] = tmp;}}
}
3.氣泡排序簡單的說就是前後兩個元素依次比較,如果不符合,就交換兩者。每一趟排序,可以排出乙個最大或最小的元素,依次冒泡就可以做出排序。通常需要n-1趟排序,可以優化一下,用乙個標記變數來檢測,如果一趟排序中沒有元素進行過交換,說明當前序列已經有序了,不需要在交換了。
void bubble_sort(int a, int n)
}if(check)
break;}}
4.希爾排序希爾排序是將待排序列按照某乙個增量分為若干個子串行,依次對子序列進行插入排序,讓待排序列部分有序,然後將增量遞分為更多的子串行,在做上述排序,直到增量為1.增量的選擇是依次遞減的,增量選擇的好壞關係到時間複雜度,此處選擇折半遞減。下面看**講解。
}5.歸併排序思路是將待排序列,例如有n個記錄,可以將它們看成是n個有序的子串行,對其兩兩進行排序,然後合併成n/2個有序的子串行,再依次兩兩合併,直到最後剩下乙個有序序列,排序完成。
void merge(int a, int b, int s, int m, int t)
if(s <= m)
if(i <= t)
for(k = 0; k <= t - i; k++)
b[j + k] = a[i + k];
} void msort(int a, int b, int s, int e)
}
堆排序,
快速排序
各種排序比較
序號
排序類別
時間複雜度
空間複雜度
穩定
1
插入排序
o(n2)
1
√
2
希爾排序
o(n2)
1
×
3
氣泡排序
o(n2)
1
√
4
選擇排序
o(n2)
1
×
5
快速排序
o(nlogn)
o(logn)
×
6
堆排序
o(nlogn)
1
×
7
歸併排序
o(nlogn)
o(n)
√
經典排序演算法
1 氣泡排序 bubble sort 最簡單的排序方法是氣泡排序方法。這種方法的基本思想是,將待排序的元素看作是豎著排列的 氣泡 較小的元素比較輕,從而要往上浮。在氣泡排序演算法中我們要對這個 氣泡 序列處理若干遍。所謂一遍處理,就是自底向上檢查一遍這個序列,並時刻注意兩個相鄰的元素的順序是否正確。...
經典排序演算法
思想 相鄰元素兩兩比較大的往下沉,小的往上浮.具體點說就是兩相鄰元素相互比較,如果前面的元素比後面的大就換位置,否則繼續比較.舉個例子吧 將陣列arr 排序 廢話了那麼多,接下來是應該有 的對吧public static void bulletsort int arr 原理 用乙個索引位置上的元素,...
經典排序演算法
1簡單插入排序 void insert sort elementtype a,int n a i tmp 新牌位置 最好情況 t o n 最壞情況 t o n2 2希爾排序 希爾排序又稱 縮小增量排序 定義增量序列dm dm 1 d1 1void shellsort elementtype a,in...