堆排序
#include <bits/stdc++.h>
using namespace std;
void AdjustDown(int a[],int k,int n){
a[0] = a[k];
for(int i = 2*k;i<=n;i*=2){
if(i<n && a[i]<a[i+1]){
i++;
}
if(a[0] >= a[i]){
break;
}
else{
a[k] = a[i];
k = i;
}
}
a[k] = a[0];
}
void BulidMaxHeap(int a[],int n){
for(int i = n/2; i>0;i--){
AdjustDown(a,i,n);
}
}
void HeapSort(int a[], int n){
BulidMaxHeap(a,n);
for(int i = n;i>1;i--)
{
swap(a[i], a[1]);
AdjustDown(a,1,i-1);
}
}
void out(int a[],int n){
for(int i=1;i<=n;i++){
cout<<a[i]<<" ";
}
cout<<endl;
}
void insertHeap(int a[],int n){
a[0] = a[n];
int i = n/2;
while(i>0 && a[i]<a[0]){
a[n] = a[i];
n = i;
i = n/2;
}
a[n] = a[0];
}
int main() {
int n = 10;
int a[] = {-1,14,9,6,13,21,10,16,17,2,12,18};
out(a,n);
BulidMaxHeap(a,n);
out(a,n+1);
insertHeap(a,n+1);
out(a,n+1);
HeapSort (a,n+1);
out(a,n+1);
return 0;
}
归并
#include <bits/stdc++.h>
using namespace std;
void out(int a[],int n){
for(int i=1;i<=n;i++){
cout<<a[i]<<" ";
}
cout<<endl;
}
void Merge(int a[],int left,int mid,int right){
int temp[10+1];
for(int i=left;i<=right;i++){
temp[i] = a[i];
}
int i,j,k;
for(i = left,j = mid+1, k = i;i<=mid && j <= right;k++){
if(temp[i] <=temp[j]){
a[k] = temp[i++];
}else{
a[k] = temp[j++];
}
}
while(i<=mid){
a[k++] = temp[i++];
}
while(j<=right){
a[k++] = temp[j++];
}
}
int n = 10;
void MergeSort(int a[],int left,int right){
if(left < right){
int mid = (left+right)/2;
MergeSort(a,left,mid);
MergeSort(a,mid+1,right);
Merge(a,left,mid,right);
}
}
int main() {
int a[] = {-1,14,9,6,13,21,10,16,17,2,12};
out(a,n);
MergeSort(a,1,10);
out(a,n);
return 0;
}
快排
#include <bits/stdc++.h>
using namespace std;
void out(int a[],int n){
for(int i=1;i<=n;i++){
cout<<a[i]<<" ";
}
cout<<endl;
}
int Partition(int a[],int low,int high){
int flag = a[low];
while(low<high){
while( low < high && a[high] >= flag){
--high;
}
a[low] = a[high];
while( low < high && a[low] <= flag){
++low;
}
a[high] = a[low];
}
a[low] = flag;
cout<<"flag:"<<flag<<endl;
out(a,10);
return low;
}
void QuickSort(int a[], int low,int high){
if(low < high){
int pivot = Partition(a,low,high);
QuickSort(a,low,pivot-1);
QuickSort(a,pivot+1,high);
}
}
int main() {
int n = 10;
int a[] = {-1,14,9,6,13,21,10,16,17,2,12};
out(a,n);
QuickSort(a,1,10);
out(a,n);
return 0;
}