冒泡和选择排序

来源:互联网 发布:ssohandler java 编辑:程序博客网 时间:2024/05/17 23:56

/*冒泡排序:两两依次比较,若违法规定则交换。
从小到大排序(若给定N个数)
1.第一次扫描要比较(N-1)次,取出最大的值,放入最后一个元素a[N-1]中。
2.第二次扫描要比较(N-2)次,取出此次最大的,放入到第二个元素a[N-2]中。
3.以此类推。。。。。
*/
#include <stdio.h>#define N 10int main(){ int a[N]; int temp ,i,j,k; k=N; printf ("Please input %d  numbers:\n",k); //输入N个数,放到数组a[N]中(a[N]:共有N个元素,但是下标0开始) for (i=0;i<N;i++ )  scanf ("%d",&a[i]); //要扫描(N-1)次 for (i=0;i<(N-1);i++)                          {  /*i=0是第一次扫描,数组里面的元素两两依次比较,       要比较(N-1)次,可以比较出一个最大的。  i=1是第二次扫描,数组里面的元素再次比较,     因为第一次已经比较出一个,所以第二次将少比较一次*/  for(j=0;j<(N-1-i);j++)   //数据交换  if (a[j]>a[j+1])  {   temp=a[j];   a[j]=a[j+1];   a[j+1]=temp;  } } //打印结果 printf ("The output is:\n "); for (i=0;i<N;i++)  printf ("%d\n",a[i]); return 0;}


选择排序

/*N个数从小到大排序
1.第一次选择:取第一个数,假设它是最小,向后依次比较,
  若出现比它小的,则进行地址互换,然后再向后继续比较,直到数据末尾。
2.第一次选择后,选出了最小数据所在的位置(地址),再把数据互换,换到第一位。
3.第二次选择:取第二个数,同1
4.同2
5.依次选择
*/
#include <stdio.h>#define N 5int main(){ //数据定义    int a[N]; int i,j,k,min,temp; k = N; //输入 printf ("Please input %d numbers:\n",k); for (i=0;i<N;i++)  scanf ("%d",&a[i]); //取第i个数,假设是最小 for (i=0;i<N;i++) {  min=i;  //第i个数,向后依次比较  //若出现比第i个数小的数,则进行地址互换  for (j=i+1;j<N;j++)  {   if (a[min] > a[j])    min=j;   }    //找到最小的数所在的位置,把最小的数换到对应位置    if(min != i )    {    temp=a[i];    a[i]=a[min];    a[min]=temp;    } } //打印 printf ("the output is:\n");     for (i=0;i<N;i++)  printf ("%d\n",a[i]);return 0;}


原创粉丝点击