#include <iostream>
#include <stdio.h>
using namespace std;
int main() {
void MaoPao_sort(int a[],int len); //冒泡排序
void Select_sort(int a[],int len); //选择排序
void Insert_sort(int a[],int len); //插入排序 (希尔排序)
void Bucket_sort(int a[],int len); //桶排序
void merge_sort(int a[],int len);//归并排序
void quickly_sort(int a[],int L,int R);//快速排序
void heap_sort(int a[],int len); //堆排序
int b[30]={1,2,5,8,6,9,4,5,2,4,5,6,8,6,0,3,7,1,3,2,9,5,3,4,2,6,7,8,9,6};
int a[10]={2,4,5,1,9,7,6,0,3,8};
int a1[11]={0,2,4,5,1,9,7,6,0,3,8};
int len=sizeof(a)/sizeof(int);
int len1=sizeof(b)/sizeof(int);
//Bucket_sort(b,len1);
//MaoPao_sort(a,len);
//Select_sort(a,len);
//Insert_sort(a,len);
//merge_sort(a,len);
//quickly_sort(a,0,len-1);
for(int i=1;i<=len;i++){
heap_sort(a1,len-i+1);
int temp;
temp=a1[1];
a1[1]=a1[len-i+1];
a1[len-i+1]=temp;
}
for(int i=1;i<=10;i++)
printf("%d ",a1[i]);
return 0;
}
//冒泡排序:从后往前相邻两个逐步比较,一轮完成之后将最小值赋给最前面的元素,相应最前面
//元素下标加一。
void MaoPao_sort(int a[],int len){ //冒泡排序
for(int i=0;i<len;i++)
for(int j=len-1;j>i;j--){
if(a[j]<a[j-1]){
int temp;
temp=a[j];
a[j]=a[j-1];
a[j-1]=temp;
}
}
}
//选择排序:从前往后相邻两个逐步比较,一轮完成之后将最小元素下标赋给min,判断min是否等于
// 最前面元素下标,如果不等交换下标相应元素值。
void Select_sort(int a[],int len){ //简单选择排序
int min;
for(int i=0;i<len;i++){
min=i;
for(int j=i+1;j<len;j++){
if(a[j]<a[min])
min=j;
}
if(min!=i){
int temp;
temp=a[i];
a[i]=a[min];
a[min]=temp;
}
}
}
//插入排序:从前往后相邻两个逐步比较,如果前面元素值大于后面,将较小元素值赋给val,然后
//将前n-1个元素依次和val比较,如果大于val,则将当前元素值向后赋给后一个元素。
void Insert_sort(int a[],int len){ //插入排序
int val;
for(int i=0;i<len-1;i++){
if(a[i]>a[i+1]){
val=a[i+1];
int j;
for(j=i+1;a[j-1]>val&&j-1>=0;j--){
a[j]=a[j-1];
}
a[j]=val;
}
}
}
void Bucket_sort(int a[],int len){ //桶排序
int c[10];
for(int i=0;i<10;i++)
c[i]=0;
for(int i=0;i<len;i++){
c[a[i]]++;
}
for(int i=0;i<10;i++){
for(int j=0;j<c[i];j++)
printf("%d ",i);
}
}
void merge(int a[],int b[],int c[],int len){ //归并排序
int R,L;
R=len/2;L=len-R;
int j=0,k=0;
for(int i=0;i<len;i++){
if(b[j]<c[k]){
a[i]=b[j];
j++;
}
else{
a[i]=c[k];
k++;
}
if(j==R){
for(int t=i+1;t<len;t++){
a[t]=c[k];
k++;
}
break;
}
if(k==L){
for(int t=i+1;t<len;t++){
a[t]=b[j];
j++;
}
break;
}
}
}
void merge_sort(int a[],int len){ //归并排序
if(len<=1) return;
int R,L,k=0;
R=len/2;L=len-R;
int b[R],c[L];
for(int i=0;i<len/2;i++)
b[i]=a[i];
for(int i=len/2;i<len;i++){
c[k]=a[i];
k++;
}
merge_sort(b,R);
merge_sort(c,L);
merge(a,b,c,len);
}
int q_sort(int a[],int L,int R){//快速排序
int p,i,j;
p=a[L];i=L+1;j=R;
while(1){
while(a[i]<=p&&i<R) i++;
while(a[j]>=p&&j>L) j--;
if(i>=j) break;
else{
int temp;
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
int temp1;
temp1=a[L];
a[L]=a[j];
a[j]=temp1;
return j;
}
void quickly_sort(int a[],int L,int R){//快速排序
if(L>=R) return;
int S=q_sort(a,L,R);
quickly_sort(a,L,S-1);
quickly_sort(a,S+1,R);
}
void heap_sort(int a[],int len){ //堆排序
int k,v;
for(int i=len/2;i>=1;i--){
k=i;v=a[k];
bool is_heap=false;
while(!is_heap&&2*k<=len){
int j=2*k;
if(j+1<=len)
if(a[j]<a[j+1])
j++;
if(v>=a[j])
is_heap=true;
else{
a[k]=a[j];
k=j;
a[k]=v;
}
}
}
如需转载,请注明出处