1、冒泡排序
基本思想:
(1)从第一个元素开始,从左往右依次比较两个相邻的元素。如果左边的元素大于右边的元素,则这两个元素进行交换。交换完成后继续依次往下比较,直到比较到最后的两个元素时,第一次排序结束,使得该数组中的最大值位于最右侧。
(2)接着下一趟比较。使得第二大的元素换到,从右数第二个的位置。
(3)一趟趟的排序,就可以使得数组从小到大排序。
代码
#include<stdio.h>
#define N 6
int main()
{
int i,j,t;
int a[N];
printf("please input 6 number\n");
//输入要排序的数字序列
for(i=0;i<N;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<N-1;i++) //一共循环n-1趟
{
for(j=0;j<N-i-1;j++) //一趟进行多少次比较
{
if(a[j]>a[j+1]) //判断是否左边是否大于右边,大于则交换
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
//打印输出
for(i=0;i<N;i++)
{
printf("%d\n",a[i]);
}
return 0;
}
运行效果
2、选择排序
基本思想: (1)首先通过n-1次比较,从n个数中找出最小的,将它与第一个数交换----第一次选择排序,结果最小的数被安置在第一个元素的位置上。 (2)再通过第二次比较,从剩余的n-1个数中找到次小的数,将它与第二个数交换-----第二次选择排序,次小的数被安置在第二个元素的位置上。 (3)重复上述过程,共经过n-1次排序后,数组中的元素从小到大顺序存储。
代码
#include<stdio.h>
#define N 6
int main()
{
int a[N],i,j,m,t;
printf("please input %d:\n",N);
//输入要排序的数字序列
for(i=0;i<N;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<N-1;i++) //一共循环n-1趟
{
m=i; //判断标志
for(j=i+1;j<N;j++) //一趟进行多少次比较
{
if(a[j]<a[m])
{
m=j; //如果遍历到的数小,记录它的下标
}
}
if(m!=i)
{
t=a[m];
a[m]=a[i];
a[i]=t;
}
}
printf("the array after sort:\n");
//打印输出
for(i=0;i<N;i++)
{
printf("%d\n",a[i]);
}
return 0;
}
运行效果