部分排序,记录,方便用~

来源:互联网 发布:照片日历制作软件 编辑:程序博客网 时间:2024/04/28 13:01

插入排序

#include<iostream>  

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
    /*left,right,root,middle*/  
using namespace std;
int a[100];
void insertsort(int a[],int n)
{
    int i, j;
    int target;
    for (i = 1; i < n; i++)
    {
        j = i;
        target = a[i];
 
        while (j > 0 && target < a[j - 1])
        {
            a[j] = a[j - 1];
            j--;
        }
 
        a[j] = target;
    }
}
int main(){
 int n;
 cin>>n;
 for(int i = 0;i < n; i++)
  cin>>a[i];
  insertsort(a,n);
  for(int i = 0;i < n; i++)
  cout<<a[i]<<" ";
  cout<<endl;

}

归并排序

#include<iostream>  
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
    /*left,right,root,middle*/  
using namespace std;
int a[100];
int tem[100];
void he(int l,int mid, int r){
int i = l,j = mid+1, k = 0;
while(i<=mid&&j<=r){
if(a[i]<a[j])
 tem[k++] = a[i++];
 else tem[k++] = a[j++];
}
while(i<=mid)tem[k++] = a[i++];
while(j<=r)tem[k++] = a[j++];
for(i = 0;i < k;i++)
 a[l+i] = tem[i];
}
void mergesort(int l ,int r){
if(l<r){
int mid = (l+r)/2;
mergesort(l,mid);
mergesort(mid+1,r);
he(l,mid,r);
}
}
int main(){
int n;
while(cin>>n){
for(int i = 0;i < n; i++)
 cin>>a[i];
 mergesort(0,n-1);
for(int i = 0;i < n; i++)
 cout<<a[i]<<" ";
 cout<<endl;
}
}


快速排序

#include<iostream>  
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
    /*left,right,root,middle*/  
using namespace std;
int a[100],t;
void quicksort(int l,int r){
if(l>r)return;
   int tem = a[l];
   int i = l,j = r;
   while(i!=j){
    while(a[j]>=tem&&i<j)j--;
    while(a[i]<=tem&&i<j)i++;
     if(i<j){
     t = a[i];
     a[i] = a[j];
     a[j] = t;
     }
   }
   a[l] = a[i];
   a[i] = tem;
   quicksort(l,i-1);
   quicksort(i+1,r);
}
int main(){
int n;
      cin>>n;
for(int i = 0;i < n; i++)
 cin>>a[i];
 quicksort(0,n-1);
for(int i = 0;i < n; i++)
 cout<<a[i]<<" ";
 cout<<endl;

}

堆排序

#include<iostream>  
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
    /*left,right,root,middle*/  
using namespace std;
int h[101],n;
void swap(int x,int y){
int t;
t = h[x];
h[x] = h[y];
h[y] = t;
}
void siftdown(int i){
int t,flag = 0;
while(i*2<=n&&flag == 0){
if(h[i]<h[i*2])
 t = i*2;
    else t = i;
   if(i*2+1 <= n){
   if(h[t]<h[i*2+1])
    t = i*2+1;
   }
   if(t!=i){
   swap(t,i);
    i = t;
   }
   else flag = 1;
}
}
void creat(){
int i;
    for(i = n/2;i >= 1;i--){
     siftdown(i);
    }
}
void heapsort(){
while(n>1){
swap(1,n);
n--;
siftdown(1);
}
}
int main(){
int i,num;
scanf("%d",&num);
for(i = 1;i <= num ;i ++)
   cin>>h[i];
   n=num;
   creat();
   heapsort();
   for(i = 1;i <= num; i++)
    printf("%d ",h[i]);
}微笑

微笑
0 0