目录
冒泡排序
int a[5]={5,4,3,2,1};
5个数:比较4轮
第一轮:
45321 43521 43251 43215
第二轮:
34215 32415 32145
第三轮:
23145 21345
第四轮:
12345
int a[5]={5,4,3,2,1},t;
for(int i=0;i<4;i++)
{
for(int j=0;j<4-i;j++)
{
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
for(int k=0;k<5;k++)
printf("%d\n",a[k]);
return 0;
宏定义版:
#define N 5
int main(int argc, char const *argv[])
{
int a[N]={},t;
for(int i=0;i<N;i++)
scanf("%d",&a[i]);
for(int i=0;i<N-1;i++)
{
for(int j=0;j<N-1-i;j++)
{
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
for(int k=0;k<N;k++)
printf("%d\n",a[k]);
return 0;
选择排序
首先从原始数组中选择最小的1个数据,将其和位于第1个位置的数据交换。
接着从剩下的n-1个数据中选择次小的1个元素,将其和第2个位置的数据交换
然后,这样不断重复,直到最后两个数据完成交换。最后,便完成了对原始数组的从小到大的排序。
#include<stdio.h>
int main(int argc, char const *argv[])
{
int a[5]={1,4,3,2,5};
int min=0; //暂存最小元素下标
int t;
for(int i=0;i<5-1;i++) //轮数
{
min=i;
for(int j=i+1;j<5;j++) //次数
{
if(a[min]>a[j])
{
min=j;
}
}
if(i!=min)
{
t=a[i];
a[i]=a[min];
a[min]=t;
}
}
for(int k=0;k<5;k++)
printf("%d ",a[k]);
return 0;
}