/*******************************************************
三种基本排序演示程序
说明:此程序适用于理解三种基本排序原理(简单排序,选择排序,插入排序)2使用随机数。
时间:2012年12月3日
更新时间:2012年12月11日
更新说明:在同学的询问下,增加了随机数代码,排序数组增加到10个,增加了条件编译。
编译环境:VS2010 Windows XP
并且在重要部分有注释
本程序是自己按照原理写的原创代码,所以定为1分吧(辛苦费吧,一般我搜集的都是免费的,望大家支持下)
此程序我调试运行成功的,如果你复制到编译器不成功,可能是编译器区别造成的,请发信息给我。
请参考 C语言三种基本排序(简单排序,选择排序,插入排序)演示程序(含注释、每一个步骤,原创)
********************************************************/
#define SJS//编译带随机数的,如果不想使用随机数,请改为Normal(为5个,可自行修改个数)
#ifdef SJS//原始的
#include<stdio.h>
#include <stdlib.h>
#include<time.h>
void main()
{
int a[10];
int i,j,temp,k,s;
srand(time(0));
for(i=0;i<10;i++)
{
a[i]=rand()%55;
}
printf("简单排序\n");
for(i=0;i<10-1;i++)//基准位到倒数第二个就行了,因为最后一个数没有比较
{
printf("%d\n",i);///////////////////////////////
for(j=i+1;j<10;j++)
{
if(a[j]<a[i])
{
temp=a[j];
a[j]=a[i];
a[i]=temp;
}
for(s=0;s<10;s++)////////////////////////////////////////
{
printf("%3d",a[s]);
}
printf("\n");///////////////////////////////////// }
}
printf(" 选择排序:\n");///////////////////////////////////// srand(time(0));
for(i=0;i<10;i++)
{
a[i]=rand()%55;
}
//选择排序:找到最小的交换:
for(i=0;i<10-1;i++)
{
k=i;//(最小元素下标)
for(j=i+1;j<10;j++)
{
if(a[j]<a[k])
k=j;//保存下标
}
if(k!=i)
{
temp=a[k];
a[k]=a[i];
a[i]=temp;
}
for(s=0;s<10;s++)////////////////////////////////////////
{
printf("%3d",a[s]);
}
printf("\n");/////////////////////////////////////
}
//冒泡排序:相邻元素交换
printf(" 冒泡排序:\n");///////////////////////////////////// srand(time(0));
for(i=0;i<10;i++)
{
a[i]=rand()%55;
}
//for(i=0;i<10;i++)
// a[i]=5-i;///////////////////////////
for(i=0;i<10-1;i++)
{
printf("%d\n",i);///////////////////////////////
for(j=0;j<9-i;j++)
{
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
for(s=0;s<10;s++)////////////////////////////////////////
{
printf("%3d",a[s]);
}
printf("\n");///////////////////////////////////// }
}
system("pause");
}
#endif
#ifdef Normal//原始的
#include<stdio.h>
#include <stdlib.h>
void main()
{
int a[5]={5,4,3,2,1};
int i,j,temp,k,s;
for(s=0;s<5;s++)
{
printf("%3d",a[s]);
}
printf("简单排序\n");
for(i=0;i<5-1;i++)//基准位到倒数第二个就行了,因为最后一个数没有比较{
printf("%d\n",i);///////////////////////////////
for(j=i+1;j<5;j++)
{
if(a[j]<a[i])
{
temp=a[j];
a[j]=a[i];
a[i]=temp;
}
for(s=0;s<5;s++)////////////////////////////////////////
{
printf("%3d",a[s]);
}
printf("\n");///////////////////////////////////// }
}
printf(" 选择排序:\n");/////////////////////////////////////
for(i=0;i<5;i++)
a[i]=5-i;///////////////////////////
//选择排序:找到最小的交换:
for(i=0;i<5-1;i++)
{
k=i;//(最小元素下标)
for(j=i+1;j<5;j++)
{
if(a[j]<a[k])
k=j;//保存下标
}
if(k!=i)
{
temp=a[k];
a[k]=a[i];
a[i]=temp;
}
for(s=0;s<5;s++)////////////////////////////////////////
{
printf("%3d",a[s]);
}
printf("\n");/////////////////////////////////////
}
//冒泡排序:相邻元素交换
printf(" 冒泡排序:\n");/////////////////////////////////////
for(i=0;i<5;i++)
a[i]=5-i;///////////////////////////
for(i=0;i<5-1;i++)
{
printf("%d\n",i);///////////////////////////////
for(j=0;j<4-i;j++)
{
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
for(s=0;s<5;s++)////////////////////////////////////////
{
printf("%3d",a[s]);
}
printf("\n");/////////////////////////////////////
}
}
system("pause");
}
#endif
/*********************************************************************************** 感谢网友无敌菜宝宝提供的帮助
祝学习愉快☺
***********************************************************************************/。