您的位置:首页 > 其它

常用排序算法

2015-06-06 14:27 274 查看
以下排序算法默认为从小到大进行排序:

1.快速排序:

#include<iostream>
#include<cstdlib>
#include<time.h>
#define M 1000
using namespace std;
void swap(int *a,int *b);
void quacksort(int a[],int start,int end);
int quack(int a[],int start,int end);

int main(){
int n;
int a[M];
cin >>n;
srand((unsigned)time(NULL));
for(int i=0;i<n;i++){
a[i]=rand()%100;
}
for(int i=0;i<n;i++){
cout <<a[i]<<"  ";//输出排序前的数字
}
cout <<endl;
quacksort(a,0,n-1);
for(int i=0;i<n;i++){
cout <<a[i]<<"  ";
}

return 0;

}

void quacksort(int a[],int start,int end){

if(start<end){
int mid=quack(a,start,end);
quacksort(a,start,mid-1);
quacksort(a,mid+1,end);
}

}

int quack(int a[],int start,int end){

int i,j,k;
j=start-1;//标记小于a[end]的数
for(i=start;i<end;i++){
if(a[i]<a[end]){
j++;
swap(&a[j],&a[i]);
}
}
swap(&a[j+1],&a[end]);
return j+1;
}

void swap(int *a,int *b){

int c=*a;
*a=*b;
*b=c;
}
2.归并排序:

#include<iostream>
#include<time.h>
#include<cstdlib>
#include<cstdio>
#define   M 1000
using namespace std;

void merger(int a[],int start,int end);
void merger_sort(int a[],int start,int temp,int end);

int main(){
int n;
int a[M];
cin >>n;
srand((unsigned)time(NULL));
for(int i=0;i<n;i++){

a[i]=rand()%100;
}
for(int i=0;i<n;i++){

cout <<a[i]<<"  ";
}
cout <<endl;
merger(a,0,n-1);
for(int i=0;i<n;i++){
cout <<a[i]<<"  ";
}

return 0;

}

void merger(int a[],int start,int end){

int temp;
if(start<end){
temp =(start+end)/2;
merger(a,start,temp);
merger(a,temp+1,end);
merger_sort(a,start,temp,end);
}
}

void merger_sort(int a[],int start,int mid,int end){

int i,j,k,n1,n2;
n1 =mid -start+1;
n2 =end - mid;
int b[M],c[M];
for(i=0;i<n1;i++){
b[i]=a[start+i];
}

for(j=0;j<n2;j++){
c[j]=a[mid+1+j];
}

k=0,j=0;
for(i=start;i<=end;i++){
if(b[k]<c[j]&&k<n1||j>=n2){
a[i]=b[k];
k++;
}else if(b[k]>=c[j]&&j<n2||k>=n1){
a[i]=c[j];
j++;
}
}
}


3.堆排序:

#include<iostream>
#include<cstdlib>
#include<time.h>
#define MAXSIZE 1000
using namespace  std;

void heapsort(int a[],int length);
void  build_max_heap(int a[] ,int length);
void max_heap(int a[],int i,int length);
void swap(int *a,int *b);
int main(){

int array[MAXSIZE];
int n,i;
cin >>n;            //ÊäÈëÊý×鳤¶È
srand((unsigned)time(NULL));
for(i = 1;i<=n;i++){                      //ÊäÈëÊý×é
array[i]=rand()%100;
}
for(i=1;i<=n;i++){
cout <<array[i]<< "  ";
}
cout <<endl;
heapsort(array,n);
for(i=1;i<=n;i++){
cout <<array[i]<< "  ";
}
return 0;
}

void heapsort(int a[],int length){

int i;
int temp;
build_max_heap(a,length);
for(i=length;i>=1;i--){
swap(&a[1],&a[i]);
max_heap(a,1,i-1);
}
}

void  build_max_heap(int a[] ,int length){

int i;
for(i=length/2;i>=1;i--){
max_heap(a,i,length);
}
}

void max_heap(int a[],int i,int length){
int max=i;
int left=2*i;
int right=2*i+1;
int temp;
if(left<=length&&a[left]>a[max])
max=left;
if(right<=length&&a[right]>a[max])
max=right;

if(max!=i){
swap(&a[i],&a[max]);
max_heap(a,max,length);
}
}

void swap(int *a,int *b){

int c=*a;
*a=*b;
*b=c;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: