您的位置:首页 > 其它

冒泡和选择排序

2017-07-11 19:39 253 查看

/*冒泡排序:两两依次比较,若违法规定则交换。

从小到大排序(若给定N个数)

1.第一次扫描要比较(N-1)次,取出最大的值,放入最后一个元素a[N-1]中。

2.第二次扫描要比较(N-2)次,取出此次最大的,放入到第二个元素a[N-2]中。

3.以此类推。。。。。

*/

#include <stdio.h>
#define N 10
int main()
{
 int a
;
 int temp ,i,j,k;
 k=N;
 printf ("Please input %d  numbers:\n",k);
 //输入N个数,放到数组a
中(a
:共有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 5

int main()
{
 //数据定义
    int a
;
 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;
}



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: