排序算法
#include<iostream>
#include<vector>
#include<string>
using namespace std;
vector<int> selectS(vector<int> v) {
for (int i = 0;i < v.size() - 1;i++) {
for (int j = i;j < v.size();j++) {
if (v[j] < v[i]) {
int tmp = v[j];
v[j] = v[i];
v[i] = tmp;
}
}
}
return v;
}
vector<int> insertS(vector<int> v) {
for (int i = 1;i < v.size();i++) {
int note = v[i];
for (int j = 0;j < i; j++) {
if (note < v[j]) {
for (int k = i;k > j;k--) {
v[k] = v[k - 1];
}
v[j] = note;
break;
}
}
}
return v;
}
vector<int> bubleS(vector<int> v) {
for (int i = 0;i < v.size()-1;i++) {
for (int j = 0;j < v.size() - 1;j++) {
if (v[j] > v[j + 1]) {
int tmp = v[j];
v[j] = v[j + 1];
v[j + 1] = tmp;
}
}
}
return v;
}
vector<int> q(vector<int> v, int start, int end) {
if (start >= end)return v;
int i = start, j = end, x = v[start];
while(i<j){
while ((i <= j) && (v[j] >= x))j--;
if (i < j) v[i++] = v[j];
while (i < j && v[i] < x) i++;
if (i < j) v[j--] = v[i];
}
v[i] = x;
v = q(v, start, i-1);
v = q(v, i + 1, end);
return v;
}
vector<int> quickS(vector<int> v)
{
return q(v, 0, v.size() - 1);
}
vector<int> merge(vector<int> v, int start, int mid, int end)
{
vector<int> tmp;
int i = start, j = mid + 1;
while(i <= mid && j <= end){
if (v[i] <= v[j]) tmp.push_back(v[i++]);
else tmp.push_back(v[j++]);
}
while(i <= mid)tmp.push_back(v[i++]);
while(j <= end)tmp.push_back(v[j++]);
for (i = 0; i < tmp.size(); i++)v[start + i] = tmp[i];
return v;
}
vector<int> mergeSortUp2Down(vector<int> v, int start, int end)
{
if(v.size()==0 || start >= end)return v;
int mid = (end + start)>>1;
v=mergeSortUp2Down(v, start, mid);
v=mergeSortUp2Down(v, mid+1, end);
v=merge(v, start, mid, end);
return v;
}
vector<int> mergeS(vector<int> v){
return mergeSortUp2Down(v,0,v.size()-1);
}
void maxHeapify(vector<int> &v, int i, int low, int high)
{
if(low >= high)return;
int l = (i << 1) + 1;
int r = (i << 1) + 2;
int largest;
if (l <= high && v[l] > v[i])largest = l;
else largest = i;
if (r <= high && v[r] > v[largest])largest = r;
if (largest != i) {
int tmp = v[i];
v[i] = v[largest];
v[largest] = tmp;
maxHeapify(v, largest, low, high);
}
else return;
}
void buildMaxHeap(vector<int> &v)
{
for (int i = v.size() >> 1;i >= 0;i--) { maxHeapify(v, i, 0, v.size() - 1); }
}
vector<int> heapS(vector<int> v)
{
int length = v.size();
buildMaxHeap(v);
for (int i = length - 1;i > 0;i--) {
int tmp = v[i];
v[i] = v[0];
v[0] = tmp;
maxHeapify(v, 0, 0, i - 1);
}
return v;
}
int main()
{
vector<int> v = { 2,4,5,6,32,124,654,32,213,3,432,32,1,4, };
v=heapS(v);
for (int i = 0;i < v.size();i++)cout << v[i] <<' ';
return 0;
}