#include "stdio.h"
#include "stdlib.h"
#include "time.h"
#define MAX 10
#define SWAP(x,y) {int t;t=x; x=y; y=t;}
void selsort(int []);
void insort(int []);
void bubsort(int []);
void bubsort1(int []);
int main(void)
{
int number[MAX]={0};
int i;
srand(time(NULL));
printf("排序前:");
for(i = 0; i< MAX;i++){
number[i] = rand()%100;
printf("%d ",number[i]);
}
do
{
printf("\n选择排序方式:\n");
printf("1.选择,2.插入,3.气泡\n");
scanf("%d",&i);
switch(i){
case 1:
selsort(number);break;
case 2:
insort(number);break;
case 3:
printf("带有标志位\n");
bubsort(number);break;
printf("不带有标志位\n");
bubsort1(number);break;
default:
printf("选择错误(1..3)\n");
}
} while (i);
return 0;
}
//选择排序
//不断的选出最小的数往前放
void selsort(int number[])
{
int i,j,k,min;
for(i = 0;i<MAX-1;i++)
{
min=i ;//最小数的小标
for (j = i+1;j<MAX;j++)
{
if (number[j] <number[min])
{
min=j;
}
if(i!=min)
{
SWAP(number[i],number[j]);
}
printf("第%d次排序:",i+1);
for(k=0;k<MAX;k++)
{
printf("%d ",number[k]);
}
printf("\n");
}
}
}
//插入排序
void insort(int number[])
{
int i,j,k,t;
for(j=1;j<MAX;j++)
{
t = number[j];
i = j -1;
while(t < number[i])
{
number[i+1] = number[i];
i--;
if(i==-1)
break;
}
number[i+1] = t;
printf("第%d次排序:",j);
for(k=0;k<MAX;k++)
{
printf("%d ",number[k]);
}
printf("\n");
}
}
void bubsort(int number[]) //带标志位
{
int i,j,k,flag = 1;
for (i=0;i<MAX-1&&flag==1;i++)
{
flag = 0;
for(j=0;j<MAX-1-i;j++)
{
if(number[j+1]<number[j])
{
SWAP(number[j+1],number[j]);
flag = 1;
}
}
printf("第%d次排序:",i+1);
for(k=0;k<MAX;k++)
{
printf("%d ",number[k]);
}
printf("\n");
}
}
void bubsort1(int number[]) //不带标志位
{
int i,j,k;
for (i=0;i<MAX-1;i++)
{
for(j=0;j<MAX-1-i;j++)
{
if(number[j+1]<number[j])
{
SWAP(number[j+1],number[j]);
}
}
printf("第%d次排序:",i+1);
for(k=0;k<MAX;k++)
{
printf("%d ",number[k]);
}
printf("\n");
}
}