演算法
穩定性時間複雜度
計數排序
穩定o(n)
基數排序
穩定o(n)
桶排序不穩定
o(n)
插入排序
穩定o(n^2)
歸併排序
穩定o(nlogn)
快速排序
不穩定o(nlogn)
希爾排序
不穩定o(n^2)
堆排序不穩定
o(nlogn)
#include
#include
using
namespace
std;
namespace sort
vector
counter(max_val, 0);
for (auto ele : in) counter[ele] += 1;
int cur = 0;
for (int i = 0; i < counter.size(); ++i)
}}/**
* 基數排序
**/int get_digit(int n, int pos)
return n % 10;
}int get_digit_length(int n)
return len;
}void radix_sort(vector
& in) ;
for (auto ele : in)
int pos[10] = ;
for (int i = 1; i < 10; ++i) pos[i] = pos[i - 1] + count[i - 1];
vector
in_tmp(in.begin(), in.end());
for (auto ele : in_tmp)
cout
<<">>loop:"
<"<<"
<",";
cout
* 桶排序
**/void insert(vector
& in, int ele)
in[i + 1] = ele;
}int get_bucket_index(int ele, int min_val, int max_val, int bucket_num)
void bucket_sort(vector
& in, int bucket_num = 10)
for (auto ele : in)
int j = 0;
for (int i = 0; i < bucket_num + 1; ++i)
}/**
* 歸併排序
**/vector
merge_sort(vector
& in, int beg, int end)
int mid = (end + beg) / 2;
auto left = merge_sort(in, beg, mid);
auto right = merge_sort(in, mid, end);
int i = 0, j = 0;
while (i < left.size() && j < right.size()) else
}while (i < left.size())
while (j < right.size())
return ret;
}void merge_sort(vector
& in)
}/**
* 快速排序
**/int devide(vector
& in, int beg, int end)
in[b] = pivot;
return b;
}void quick_sort_seg(vector
& in, int beg, int end)
}void quick_sort(vector
& in)
/** * 直接插入排序
**/void insert_sort(vector
& in)
in[j + 1] = tmp;
}}/**
* 希爾排序
**/void shell_sort(vector
& in) ;
for (auto step : steps)
in[j + step] = tmp;}}
}/**
* 堆排序
**/int l_child(int parent)
int r_child(int parent)
void heapify(vector
& in, int top, int end)
void heap_sort(vector
& in) }};
int main()
//sort::count_sort(data);
//sort::radix_sort(data);
//sort::bucket_sort(data);
//sort::merge_sort(data);
//sort::quick_sort(data);
//sort::insert_sort(data);
//sort::shell_sort(data);
sort::heap_sort(data);
for (auto ele : data) cout
<<"\t"
0;}
八種常見的演算法排序
一 排序演算法的分類 列舉7種 1.氣泡排序 2.選擇排序 3.插入排序 4.快速排序 5.歸併排序 歸併排序需要額外的記憶體空間來儲存資料,其他的方式都是在原來資料上做交換 6.希爾排序 7.堆排序 1 最基礎的排序 氣泡排序 時間複雜度是 o n 2 設無序陣列a長度為n,以由小到大排序為例。冒...
八種常見排序演算法java實現
目錄 1.直接插入排序 2.希爾排序 3.簡單選擇排序 4.堆排序 5.氣泡排序 6.快速排序 7.歸併排序 8.基數排序 經常碰到這樣一類排序問題 把新的資料插入到已經排好的資料列中。將第乙個數和第二個數排序,然後構成乙個有序序列 將第三個數插入進去,構成乙個新的有序序列。對第四個數 第五個數 直...
八種排序演算法
include include 氣泡排序 void boblesort int arr,int n 插入排序 void insertsort2 int arr,int n 希爾排序 void shellsort2 int arr,int n 選擇排序 void selectsort int arr,...