比較排序演算法

2021-07-11 01:37:59 字數 1966 閱讀 8084

常用的比較排序演算法有:

直接插入排序,希爾排序,選擇排序,堆排序,氣泡排序,快速排序,歸併排序等。

它們的時間複雜度及空間複雜度為:

實現**如下:

#includeusing namespace std;

#include#include//插入排序

void insertsort(int *a, size_t size)

a[end + 1] = tmp; }}

//希爾排序

void shellsort(int *a, size_t size)

a[end + gap] = tmp;

} }}//選擇排序

void selectsort(int *a, size_t size)

if (a[i] > a[max])

} }}

void adjust(int *a, int size, int root)

if (a[child] > a[parent])

else

}}//堆排序

void heapsort(int *a, int size)

for (int j = size - 1; j >= 0; j--) }

void print(int *a, size_t size)

cout << endl;

}//氣泡排序

void bubblesort(int *a, int size)

} }}int partsort1(int *a, int left, int right)

while (end > begin && a[end] >= key)

if (a[begin] > a[end])

}if (a[begin] > key)

else }

//優化

int partsort2(int *a, int left, int right)

++cur;

} swap(a[++prev], a[right]);

return prev;

}//快速排序(遞迴)

void quicksort1(int *a, int left, int right)

}//非遞迴

void quicksort2(int *a, int left, int right)

if (right > boundary + 1)

while (!s.empty())

if (boundary + 1 < end)

} }}

void sectionsort(int *a, int *tmp, int begin1, int end1, int begin2, int end2)

else

}if (begin1 <= end1) }

if (begin2 <= end2) }

}void _mergesort(int *a, int *tmp, int left, int right) }

//歸併排序

void mergesort(int *a,int size, int left, int right)

int main()

;// insertsort(a, 10);

// shellsort(a, 10);

// selectsort(a, 10);

// heapsort(a, 10);

// bubblesort(a, 10);

// quicksort1(a, 0, 9);

quicksort2(a, 0, 9);

// mergesort(a,10, 0, 9);

print(a, 10);

return 0;

}

排序演算法比較

本章中已經研究並仔細分析了多個內部排序方法。對於這些內部排序方法之間的比較,主要從以下幾個方面綜合考慮 時間複雜度 空間複雜度 演算法穩定性 演算法簡單性 待排序記錄數 n的大小 記錄本身的資訊量等。選擇n 個整數組成一些隨機排序,各種內部排序方法的實際時間如圖 7 10 所示。從時間複雜度看,所有...

排序演算法比較

排序方法 最好時間 平均時間 最壞時間 輔助儲存 穩定性備註 簡單選擇排序 o n2 o n2 o n2 o 1 不穩定n小時較好 直接插入排序 o n o n2 o n2 o 1 穩定大部分已有序時較好 氣泡排序 o n o n2 o n2 o 1 穩定n小時較好 希爾排序 o n o nlogn...

排序演算法比較

排序演算法的時間效率 平均情況 最好情況 最壞情況 基數排序 歸併排序 快速排序 希爾排序 插入排序 選擇排序 o n o n logn o n logn o n 1.5 o n 2 o n 2 o n o n logn o n logn o n o n o n 2 o n o n logn o n...