1.直接插入排序
每一趟將乙個待排序的元素作為關鍵字,按照其關鍵字的大小插入到已經排好的部分序列的適當位置上。平均時間複雜度為o(n2),空間複雜度為o(1)。
void insertsort(int r, int n)
r[j+1] = temp;
}}
2.氣泡排序
平均時間複雜度為o(n2),空間複雜度為o(1)
void bubblesort(int r, int n)
} if (flag == 0)
return;
}}
3.快速排序
快速排序以樞軸為中心,將序列分成兩部分。關鍵是樞軸的劃分。
時間複雜度:最好的情況下為o(nlogn),最壞為o(n2)
空間複雜度:o(log2n)
遞迴演算法:
void quicksort(int r, int low, int high)
幾種劃分演算法:
1.從後往前掃瞄直到小於樞軸的位置j,將r[j]交換到i的位置;從i開始往後掃瞄,直到遇到大於樞軸的位置i,把r[i]交換到j的位置。
int partition(int r, int low, int high)
r[low] = pivot;
return low;
}
2.從前往後掃瞄,遇到小於樞軸的值,則遞增small值,如果當前下標與small不相等,則交換,保證small左邊的元素都小於樞軸。
int partition(int data, int start, int end)
} swap(r[low], r[j]);
return j;
}
4.堆排序
堆是一種資料結構,可以把堆看成完全二叉樹,這棵完全二叉樹滿足:任何乙個非葉節點的值都不大於(或不小於)其左右孩子節點的值。若父節點大於孩子節點,則叫大頂堆,父節點小於孩子節點,則叫小頂堆。
堆排序的主要操作是將序列調整為堆。
時間複雜度:o(n log2n);空間複雜度:o(1)
void shift(int r, int low, int high)
if (temp < r[j])
else
break;
} r[i] = temp;
}void heapsort(int r, int n)
for (i = n-1; i >= 1; --i)
}
4.二路歸併排序
歸併排序的時間複雜度和初始序列無關,平均情況下為o(n log2n),最好情況下為o(nlog2n),最壞情況下也為o(nlog2n)。
空間複雜度:因歸併排序需要轉存整個待排序列,因此空間複雜度為o(n)
void merge(int r, int temparray, int low, int mid, int high)
while (i <= mid)
temparray[k++] = r[i++];
while (j <= high)
temparray[k++] = r[j++];
for (int i = low; i <= high; ++i) }
void mergesort(int r,int temparray, int low, int high)
}void mergesort(int r, int n)
5.計算排序
適用於元素的取值範圍比較小的情況。
1>統計每個元素的個數
2>統計每個元素比自身小的元素個數
template void countingsort(type array, int low, int high, int range)//range為元素的取值範圍
for (int i = low; i <= high; ++i)
for (int i = 1; i <= range; ++i)
for (int i = high; i >= low; --i)
int i = low;
while (i <= high)
delete result;
delete valuecount;
}
各種排序演算法的分析與比較
直接插入排序 每次取乙個記錄插入到已經排好序的有序表中,得到乙個新的有序表。在插入過程中為了防止下標出界,需要在r 0 處加入乙個監視哨。該演算法的時間複雜度為o def insertsort l l.insert 0,0 插入監視哨,c初值為0 for i in range 2,len l 第乙個...
各種排序演算法比較
花了很長時間終於把排序的基礎學了一下,這段時間學了很多東西,總結一下 學的排序演算法有 插入排序,合併排序,氣泡排序,選擇排序,希爾排序,堆排序,快速排序,計數排序,基數排序,桶排序 沒有實現 比較一下學習後的心得。我不是很清楚他們的時間複雜度,也真的不知道他們到底誰快誰慢,因為書上的推導我確實只是...
各種排序演算法比較
排序相關的演算法複雜度分析 下邊分別實現下各個演算法 簡單選擇排序 1 簡單選擇排序 2void select sort int a,intn 3 16 17swap a i a index 18 19 這裡簡單選擇排序之所以不穩定是因為交換的時候會打亂順序,例如 5,4,5,1,6。第一次交換後會...