void InsertSort(vector<int>& vec) {//stable
int sz = vec.size();
for (int wall = 1; wall < sz; ++wall) {
for (int index = wall; index > 0 && vec[index] < vec[index - 1]; index--)
swap(vec[index], vec[index - 1]);
}
}
void BubbleSort(vector<int>& vec) {//stable
int sz = vec.size();
for (int wall = 0; wall < sz - 1; ++wall) {
for (int i = sz - 1; i > wall; i--) {
if (vec[i] < vec[i - 1]) swap(vec[i], vec[i - 1]);
}
}
}
void SelectSort(vector<int>& vec) {//not stable
int sz = vec.size();
for (int wall = 0; wall < sz - 1; ++wall) {
int minm = wall;
for (int index = wall + 1; index < sz; ++index)
if (vec[index] < vec[minm]) minm = index;
swap(vec[minm], vec[wall]);
}
}
//shellsort not stable
void Insertsort(vector<int>& vec, int begin, int dist) {
int sz = vec.size();
for (int wall = begin + dist; wall < sz; wall += dist) {
for (int index = wall; index > begin && vec[index] < vec[index - dist]; index -= dist) {
swap(vec[index], vec[index - dist]);
}
}
}
void ShellSort(vector<int>& vec) {
int sz = vec.size();
for (int i = sz / 2; i >= 1; i /= 2) {
for (int j = 0; j < i; ++j) {
Insertsort(vec, j, i);
}
}
}
//quicksort
//因为支点定在最右边,所以循环从左开始,保证停止的地方的值大于等于pivot
int findmid(vector<int>& vec, int b, int e) {
int pivot = vec[e];
while (b < e) {
while (vec[b] < pivot) ++b;
while (e>b && vec[e] >= pivot) --e;
swap(vec[b], vec[e]);
}
return b;
}
void QuickSort(vector<int>& vec,int begin,int end) {
if (begin >= end) return;
int mid = findmid(vec, begin, end);
swap(vec[mid], vec[end]);
QuickSort(vec, begin, mid - 1);
QuickSort(vec, mid + 1, end);
}
void MergeSort(vector<int>& vec) {
if (vec.size() == 1) return;
int mid = vec.size() / 2;
vector<int>vec1(vec.begin(), vec.begin() + mid);
vector<int>vec2(vec.begin() + mid, vec.end());
MergeSort(vec1);
MergeSort(vec2);
merge(vec1.begin(),vec1.end(),vec2.begin(),vec2.end(),vec.begin());
}
各种Sort(还有堆排序桶排序基排序没写)
最新推荐文章于 2024-07-28 15:14:26 发布