堆排序
```cpp void make_heap(vector& vecTest,int start,int end) { int max_child_index = start * 2 - 1; if ((max_child_index + 1) < end) { if (vecTest[max_child_index] < vecTest[max_child_index + 1]) { max_child_index = max_child_index+1; } } if (vecTest[max_child_index] > vecTest[start-1]) { int temp = vecTest[max_child_index]; vecTest[max_child_index] = vecTest[start-1]; vecTest[start-1] = temp; } return; }void heap(vector& vecTest)
{
int start;
for(int end = vecTest.size(); end >0;end–)
{
start = end / 2;
for(int child_root = start;child_root>0;child_root–)
{
make_heap(vecTest,child_root,end);
}
int temp = vecTest[0];
vecTest[0] = vecTest[end-1];
vecTest[end-1] = temp;
}
return;
}
<h1>归并</h1>
```cpp
void merge(vector<int> &vec, int left, int right, int mid)
{
int *help = new int[right - left + 1];
int p1 = left, p2 = mid + 1, i = 0;
while (p1 <= mid && p2 <= right)
{
help[i++] = vec[p1]<vec[p2] ? vec[p1++] : vec[p2++];
}
while (p1 <= mid)
{
help[i++] = vec[p1++];
}
while (p2 <= right)
{
help[i++] = vec[p2++];
}
for (size_t j = 0; j <= right - left; j++)
{
vec[left + j] = help[j];
}
delete[] help;
}
void merge_process(vector<int> &vec, int left, int right)
{
if (left<right)
{
int mid = (left + right) / 2;
merge_process(vec, left, mid);
merge_process(vec, mid + 1, right);
merge(vec, left, right, mid);
}
}
void merge_sort(vector<int> &vec)
{
if (vec.size() < 2)
return;
merge_process(vec, 0, vec.size() - 1);
}
int main()
{
vector<int> Vec = { 5,4,9,8,6,2,7,1,3 };
merge_sort(Vec);
for (auto iter = Vec.begin(); iter != Vec.end(); iter++)
{
cout << *iter << " ";
}
system("pause");
return 0;
}
快排
void qs(vector<int>& myVec,int left,int right)
{
int i = left,j = right,temp;
int mid = myVec[(left+right)/2];
while(i<=j)
{
while (myVec[i]<mid) i++;
while (myVec[j]>mid) j--;
if(i<= j)
{
temp = myVec[i];
myVec[i] = myVec[j];
myVec[j] = temp;
i++;
j--;
}
}
if (left<j) qs(myVec,left,j);
if (i<right) qs(myVec,i,right);
}
int main()
{
vector<int> Vec = {5,4,9,8,6,2,7,1,3};
qs(Vec,0,Vec.size()-1);
for(auto iter = Vec.begin();iter!=Vec.end();iter++)
{
cout << *iter <<" ";
}
return 0;
}