平时候是直接用sort()的,好久没有写这些排序了。我们不能忘记他们的内部实现原理。
/* Note:Your choice is C IDE */
#include "stdio.h"
#include "stdlib.h"
//冒泡排序
void bubbling(int b[],int n){
int i,j,length=n-1,temp;
for(i=1;i<=length;){
for(j=i-1;j<length;j++){
if(b[j]>b[j+1]){
temp=b[j];
b[j]=b[j+1];
b[j+1]=temp;
}
}
length=j-1;
}
}
//选择排序
void select(int b[],int n){
int i,j,k,temp;
for(i=0;i<n-1;i++){
k=i;
for(j=i+1;j<n;j++){
if(b[k]>b[j]) k=j;
}
if(k!=i){
temp=b[k];
b[k]=b;
b=temp;
}
}
}
//插入排序
void insert(int b[],int n){
int i,t,j;
for(i=1;i<n;i++){
for(t=b,j=i-1;j>=0&&t<b[j];j--){
b[j+1]=b[j];
b[j]=t;
}
}
}
//希尔排序
void shell(int b[],int n){
int h,j,k,y;
for(h=n/2;h>0;h=h/2){
for(j=h;j<n;j++){
y=b[j];
for(k=j-h;k>=0&&y<b[k];k=k-h){
b[k+h]=b[k];
b[k]=y;
}
}
}
}
//待写....................明天要考试
//快速排序
// void quick(int b[],int n){}
//堆排序
//void stack(int b[],int n){}
//归并排序
//combine(itn b[],int n){}
void main()
{
int a[8]={9,5,14,11,8,9,4,10};
int m=8,i,alter,show;
printf("before Sort:\n");
for(i=0;i<8;i++){
printf("%d\t",a);
}
printf("\n**********************************\n");
printf("冒泡排序.....1\n");
printf("选择排序.....2\n");
printf("插入排序.....3\n");
printf("希尔排序.....4\n");
printf("退出.........0\n");
printf("**********************************");
do{
printf("\nPlease input your alter:");
scanf("%d",&alter);
switch(alter){
case 1:bubbling(a,m);
show=1;
printf("after bubbling sort:\n");
break;
case 2:select(a,m);
show=1;
printf("after select sort:\n");
break;
case 3:insert(a,m);
show=1;
printf("after insert sort:\n:");
break;
case 4:shell(a,m);
show=1;
printf("after shell sort:\n:");
break;
case 0:exit(0);
default:printf("input error!!!!!!!!");
show=0;
}
if(show!=0){
for(i=0;i<8;i++){
printf("%d\t",a);
}
}
}while(alter!=0);
}
|