排序算法--排序算法汇总
排序算法无疑是学习数据结构中的重点内容,本文将给出排序算法的汇总。下面是具体的实现:
[cpp]
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define N 1000000
int Array[N];
int Temp[N];
//1、冒泡排序
void BubbleSort(int a[],int n){
int i,j;
int temp;
int tag;
for(i=n-1;i>0;i--){
tag = 0;
for(j=0;j<i;j++)
if(a[j]>a[j+1]){
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
tag=1;
}
if(tag==0) break;
}
}
//2、简单插入排序
void SimpleInsertSort(int a[],int n){
int i,j,k;
int temp;
for(i=1;i<n;i++){
for(j=0;j<i;j++)
if(a[j]>a[i]){
k=j;
break;
}
if(j==i) continue;
temp=a[i];
for(j=i;j>k;j--)
a[j]=a[j-1];
a[k]=temp;
}
}
//3、希尔排序
void ShellSort(int a[],int n,int d){
int h,i,j,k;
int temp;
do{
d=d/3+1;
for(h=0;h<d;h++)
for(i=h+d;i<n;i+=d){
for(j=h;j<i;j+=d)
if(a[j]>a[i]){
k=j;
break;
}
if(j==i) continue;
temp=a[i];
for(j=i;j>k;j-=d)
a[j]=a[j-d];
a[k]=temp;
}
}while(d>1);
}
//4、简单选择排序
void SimpleSelectSort(int a[],int n){
int i,j,k;
int temp;
for(i=0;i<n;i++){
temp=a[i];
k=i;
for(j=i+1;j<n;j++)
if(a[j]<temp){
temp=a[j];
k=j;
}
if(k!=i){
temp=a[i];
a[i]=a[k];
a[k]=temp;
}
}
}
//5、堆排序
void CreateHeap(int a[],int n){
int i,j;
int temp;
for(i=(n-2)/2;i>=0;i--){
j=2*i+1;
while(j<n){
if(j+1<n&&a[j+1]>a[j])
j++;
if(a[(j-1)/2]<a[j]){
temp=a[(j-1)/2];
a[(j-1)/2]=a[j];
a[j]=temp;
}
else break;
j=2*j+1;
}
}
}
void HeapAdjust(int a[],int n){
int i=0;
int j;
int temp;
while(i<n&&2*i+1<n){
j=2*i+1;
if(j+1<n&&a[j+1]>a[j])
j++;
if(a[i]<a[j]){
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
else break;
i=j;
}
}