八種常見的排序演算法

2021-08-01 13:09:23 字數 2767 閱讀 9752

演算法

穩定性時間複雜度

計數排序

穩定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,...