废话少说,直接上代码
插入法
#include<stdio.h>
int main()//插入法
{
int a[7]={2,4,1,5,3,9,7};//初始化数组
int i,temp,p;
for(i=1;i<7;i++)//从第二项开始
{
temp=a[i];//将要插入的变量抽出
p=i-1;//从比变化项少一位的数据开始
while(p>=0&&temp<a[p])//将比temp大的数据向前移动一位
//因为循环是从第二项开始的,所以不用担心,temp之前的项是已经从小到大排好序了的
{
a[p+1]=a[p];//将数据向前移一位
p--;
}
a[p+1]=temp;//将temp插入
}
for(i=0;i<7;i++)
printf("%d ",a[i]);
}
冒泡法
#include<stdio.h>
int main()//冒泡法
{
int a[5]={8,5,4,9,1};//初始化数据
int i,temp,j,t;
for(j=1;j<5;j++)//进行几次冒泡
{
for(i=0;i<4;i++)//冒泡
{
if(a[i]>a[i+1])//如果前一项比较大,就前后交换
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
}
}
for(i=0;i<=4;i++)
printf("%d ",a[i]);
}
#include <stdio.h>
#define N 8
void main()
{ double a[N], temp;
int i,j;
for(i=0;i<N;i++)
scanf("%lf",&a[i]);
for(i=1;i<=N-1;i++)//共N-1趟排序
for(j=0;j<N-i;j++)//每趟排序N-i个数两两比较
if(a[j]>a[j+1])//若相邻两元素无序,则交换
{ temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
for(i=0;i<N;i++)
printf("%8.2lf\n",a[i]);
}
冒泡法循环优化
#include<stdio.h>
int main()//冒泡法
{
int a[5]={8,5,4,9,1};//初始化数据
int i,temp,j,t,s;
for(j=1;j<5;j++)//进行几次冒泡
{
t=0;
for(i=0,s=0;i<4-s;i++)
//冒泡
//因为每一次冒泡都会把最大的数放在最上面,无需比较,所以此处可以优化
{
if(a[i]>a[i+1])//如果前一项比较大,就前后交换
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
t++;//加一个计数器记录交换次数
}
}
s++;
if(t==0)
break;//如果这次冒泡一次交换也没有,则上一次冒泡已经达到想要的结果,可以提前结束
}
for(i=0;i<=4;i++)
printf("%d ",a[i]);
}