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 原理 用乙個索引位置上的元素,...