經典排序演算法

2021-08-13 02:52:14 字數 2607 閱讀 9442

1簡單插入排序:

void insert_sort(elementtype a, int n) 

a[i] = tmp;//新牌位置}}

最好情況:t=o(n)

最壞情況:t=o(n2

)2希爾排序

希爾排序又稱」縮小增量排序」。定義增量序列dm

> dm

−1>

… >d1

= 1

void shellsort(elementtype a, int n) ;//使用dedgewick增量序列

for(si=0; sedgewick[si]>=n; si++) ;

for(d=sedgewick[si]; d>0; d=sedgewick[++si])

a[i] = tmp;}}

}

hibbard增量序列: dk

= 2k

-1 相鄰元素互質

最壞情況:t=o(n3

/2)

平均情況:t=o(n5

/4)

sedgewick增量序列 9x

4i-9x2i

+1 或者 4i

-3x2i

+1 最壞情況:t=o(n4

/3)

平均情況:t=o(n7

/6)3選擇排序

基本思路是每一趟在n-i+1個記錄中選擇最小的記錄作為第i

個元素。

void selection_sort(elementtype a, int n) 

}

時間複雜度t(n2

) 堆排序一種樹形選擇排序,只需要乙個記錄大小的儲存空間

void swap(elementtype *a, elementtype *b) 

void percdown(elementtype a, int p, int n)

if(x >= a[child])break;//找到合適位置

eles a[parent] = a[child];

}a[parent] = x;

}void heapsort(elementtype a, int n)

for(i=n-1; i>0; i--)

}

最好情況:t=o(nlogn)

最壞情況:t=o(nlogn)

4快速排序

快排採用分治思想將乙個序列分成兩個子串行。

void qsort(elementtype a, int left; int right) 

while(a[high--] > pivot){}

if(low < high) swap(&a[low], &a[high]);

else

break;

}swap(&a[low], &a[right-1]);

qsort(a, left, low-1);

qsort(a, low+1, right);

}

最好情況:t=o(nlogn)

最壞情況:t=o(n2)

5歸併排序

void marge(elementtype a, elementtype tmpa, int l, int r, int rightend)  else 

}while(l <= leftend)

while(r <= rightend)

for(i=0; ivoid msort(elementtype a, elementtype tmpa, int l, int rightend)

}

時間複雜度t( n ) = o( n logn ),需要額外空間o(n)

6基數排序

輸入序列:64, 8, 216, 512, 27, 729, 0, 1, 343, 125 。t=o(p(n+b))

//基數排序

#define maxdigit 4//關鍵字個數

#define radix 10//基數

typedef

struct node *ptrtonode;

strut node;//桶元素節點

struct headnode ;//桶頭結點

typedef strut headnode bucket[radix];

int getdigit(int x, int d)

return d;

}void lsdeadixsort(elementtype a, int n)

for(d=1; d<=maxdigit; d++) else

}list = null;

for(di=radix-1; di>=0; di--) }}

for(i=0; inext;

a[i] = tmp->key;

free(tmp);}}

平均時間複雜度o(p(n+b)),空間複雜度o(n+b)

經典排序演算法

排序分為內部排序和外部排序,內部排序是指待排序的資料都是在記憶體中的,例如陣列 外部排序指待排序資源在記憶體外,例如對檔案的排序。此篇說的是內部排序。通俗地來說,內部排序就是將一堆資料按一定規則對它進行排序。排序又分為穩定排序和不穩定的排序,如果初始序列ai,ak有序 ai ak 排序後變成了ak,...

經典排序演算法

1 氣泡排序 bubble sort 最簡單的排序方法是氣泡排序方法。這種方法的基本思想是,將待排序的元素看作是豎著排列的 氣泡 較小的元素比較輕,從而要往上浮。在氣泡排序演算法中我們要對這個 氣泡 序列處理若干遍。所謂一遍處理,就是自底向上檢查一遍這個序列,並時刻注意兩個相鄰的元素的順序是否正確。...

經典排序演算法

思想 相鄰元素兩兩比較大的往下沉,小的往上浮.具體點說就是兩相鄰元素相互比較,如果前面的元素比後面的大就換位置,否則繼續比較.舉個例子吧 將陣列arr 排序 廢話了那麼多,接下來是應該有 的對吧public static void bulletsort int arr 原理 用乙個索引位置上的元素,...