#include
#define size 10
using
namespace
std;
void print(int arr, int n)
void swap(int &a, int &b)
/*氣泡排序:持續比較相鄰兩個數最多n趟
最好 最壞 平均 空間 穩定性 複雜性
o(n) o(n^2) o(n^2) o(1) 穩定 簡單
*/void bubblesort(int arr, int n)
if (exchange == 0) //如果某一趟一次也沒有交換,則說明已經是乙個有序序列
break;
}}/*
堆排序:構造大(降序)/小(公升序)頂堆,
最好 最壞 平均 空間 穩定性 複雜性
o(nlog2n) o(nlog2n) o(nlog2n) o(1) 不穩定 較複雜
*///該函式用於判斷當前節點是否有左右子樹,以及有必要的話交換當前節點與左右子節點中較小的那個
void heapswap(int arr,int root,int n)
else
if (left <= n) //如果右節點大於n,而存在左節點的話
if (arr[root] > arr[left])
swap(arr[root], arr[left]);
}void heapadjust(int arr, int root, int n)
void heapsort(int arr, int n)}/*
選擇排序:每次從未排序的陣列中找出最大(降序)或最小(公升序)的元素與未排序陣列最前面的元素交換
最好 最壞 平均 空間 穩定性 複雜性
o(n^2) o(n^2) o(n^2) o(1) 不穩定 較簡單
*/void selectionsort(int arr, int n)
}}/*
最好 最壞 平均 空間 穩定性 複雜性
o(n) o(n^2) o(n^2) o(1) 穩定 較簡單
*/void insertionsort(int arr, int n)}/*
快速排序:挖坑填數
最好 最壞 平均 空間 穩定性 複雜性
o(nlogn) o(n^2) o(nlogn) o(1) 不穩定 較簡單
*/void quicksort(int arr, int n, int l, int r)
while (i < j&&arr[i] < key)
i++;
if (i < j)
arr[i] = key;
quicksort(arr, n, l,i-1);
quicksort(arr, n, i+1, r);
}}int main();
int arr2[size] = ;
cout
<< "源陣列:"
<< endl;
print(arr1, size);
//氣泡排序:公升序
bubblesort(arr1, size);
cout
<< "氣泡排序:公升序"
<< endl;
print(arr1, size);
//堆排序:降序
cout
<< "堆排序:降序"
<< endl;
heapsort(arr1, size);
print(arr1, size);
//選擇排序:公升序
cout
<< "選擇排序:公升序"
<< endl;
selectionsort(arr1, size);
print(arr1, size);
//插入排序:降序
cout
<< "插入排序:降序"
<< endl;
insertionsort(arr1, size);
print(arr1, size);
//快速排序:公升序
cout
<< "快速排序:公升序"
<< endl;
quicksort(arr1, size, 0, size-1);
print(arr1, size);
system("pause");
return
0;}
C 實現各種排序 快排 插排 冒泡
1 插入排序 插入排序 主要思想 將陣列中的第乙個數認為是有序排列,剩下的n 1個數與第乙個數比較,再進行排序 有兩層迴圈,第一層控制排序的趟數,第二層控制每一趟比較的個數 include using namespace std int main for int i 0 i 10 i cin a i...
各種排序 冒泡,歸併,快排等實現與對比。
排序的呼叫方法 n為陣列,測試了5萬條資料。long starttime system.currenttimemillis 獲取開始時間 system.out.println 排序開始 starttime sort n long endtime system.currenttimemillis 獲取...
Python 實現快排 堆排
原理 公升序 選取陣列的首個元素做為中間值,快取這個中間值,該位置變為空 從右到左和中間值對比,找到第乙個小於中間值的元素,把該值放到左邊的空位,該位置變為空 從左到右和中間值對比,找到第乙個大於中間值的元素,把該值放到右邊的空位,該位置變為空 重複步驟2和3,直到左右空位相交,然後把快取的中間值填...