高效面試之各種排序演算法c實現

2021-06-23 01:54:57 字數 1244 閱讀 4863

/*--------------

author:cqkxboy168

date:2014-8-4

--------------*/

#include #include //bitmap使用

#define max 200

int map[1+max/32]=;

void swap(int *a,int *b)

//選擇排序:

//原理:[無序],每一次迴圈從[無序]裡面select乙個最小的元素。

void selectsort(int array,int len)

迴圈,所以j的開始下標為j=i-1

}}//歸併排序

//原理:遞迴地把陣列折半,當陣列只有1個元素時有序,再合併這些有序陣列

//合併陣列array[frist...mid]和array[mid+1...last]

void merge(int array,int frist,int mid,int last)

//每次迴圈取出乙個最大值,縮小heap的範圍

for(i=len-1;i>=0;--i) }

//位圖排序

void setbit(int n)

int testbit(int n)

void bitmapsort(int array,int len)

[無序],從無序裡面選擇出最小的數來,都得把[無序]裡的元素全部比較一遍。

2.3時間複雜度

二大消耗空間的排序

歸併排序,基數排序

乙個時間和空間一樣的排序

快速排序0(logn)

1、時間複雜度達到o(nlgn) 的排序演算法有:快速排序、堆排序、歸併排序。

2、上面前四大類排序中,不穩定的排序有:希爾排序、快速排序、堆排序、簡單的選擇排序。

穩定的排序有:插入排序(除希爾外)、氣泡排序、歸併排序。

3、從平均時間效能而言,快速排序最佳,其所需要的時間最少,但快速排序在最壞的情況下,時間效能還不如堆排序和歸併排序。

所有簡單排序和堆排序都是0(1) ,因為需要乙個臨時變數來交換元素位置,(另外遍歷序列時自然少不了用乙個變數來做索引)

快速排序為0(logn),要為遞迴程式執行過程

棧所需的輔助空間 

歸併排序空間複雜是o(n),需要乙個大小為n的臨時陣列

歸併排序和基數排序所需輔助空間最多,為o(n)

桶排序的空間複雜度不確定

各種排序演算法C 實現

各種排序演算法的實現 交換函式 void swap int list,int low,int high 小於函式 bool lt const int low,const int high 插入排序 穩定 原理 插入排序逐個處理待排序的記錄。每個新記錄與前面已排序的子串行進行比較,將它插入到子串行中正...

各種排序演算法C 實現

include include include using namespace std 插入排序 void insertsort int num,int len 氣泡排序 void bubblesort int num,int len if flag break 選擇排序 void selectso...

Java實現 高效排序演算法之堆排序

堆排序只需要乙個記錄大小的輔助空間,每個待排序的記錄僅占有乙個儲存空間。在處理堆排序時面臨兩個問題 乙個是如何建堆。另乙個是如何在輸出堆頂後進行調整,成為乙個新堆。建堆的過程主要是通過在n 2 取下限 處開始,反覆進行 篩選 的過程。具體過程見演算法分析及注釋。堆排序的偽 heapsort data...