C语言排序算法总结
From: http://www.diybl.com/course/6_system/linux/Linuxjs/20091028/180420.html
首先我們來了解一些基本概念:
(1)穩(wěn)定排序和非穩(wěn)定排序
簡單地說就是所有相等的數(shù)經(jīng)過某種排序方法后,仍能保持它們在排序之前的相對次序,我們就
說這種排序方法是穩(wěn)定的。反之,就是非穩(wěn)定的。
?比如:一組數(shù)排序前是a1,a2,a3,a4,a5,其中a2=a4,經(jīng)過某種排序后為a1,a2,a4,a3,a5,
則我們說這種排序是穩(wěn)定的,因?yàn)閍2排序前在a4的前面,排序后它還是在a4的前面。假如變成a1,a4,
a2,a3,a5就不是穩(wěn)定的了。
(2)內(nèi)部排序和外部排序
在排序過程中,所有需要排序的數(shù)都在內(nèi)存,并在內(nèi)存中調(diào)整它們的存儲順序,稱為內(nèi)排序;
在排序過程中,只有部分?jǐn)?shù)被調(diào)入內(nèi)存,并借助內(nèi)存調(diào)整數(shù)在外存中的存放順序排序方法稱為外排序。
(3)算法的時(shí)間復(fù)雜度和空間復(fù)雜度
?所謂算法的時(shí)間復(fù)雜度,是指執(zhí)行算法所需要的計(jì)算工作量。
?一個(gè)算法的空間復(fù)雜度,一般是指執(zhí)行這個(gè)算法所需要的內(nèi)存空間。
(1)選擇排序算法:它是非穩(wěn)定的。每一趟在n-i+1個(gè)記錄中選取最小的記錄作為有序序列的第i的記錄。它的算法如下:
| void choose_sort(int *x, int n)/*x數(shù)組名 n為數(shù)組長度*/ |
| void insert_sort(int *x, int n) |
x[s],x[s+1]...x[i-1]和x[i+1],x[i+1]...x[t]
可以看書,low==i.
之后我們這兩部分再進(jìn)行Partition()函數(shù)排序。
Partition(int *x, int low, int high)解析:
我們從high開始逆序找,從low開始順序找,最后low等于high后便退出這一趟排序。代碼如下:
| int Partition(int *x, int low, int high) |
| void QSort(int *x, int low, int high) |
void QuickSort(int *x, int n)
{
????QSort(x, 0, (n-1));
}
總結(jié)
- 上一篇: UE4像素流
- 下一篇: fgetcsv()函数