Chinaunix首页 | 论坛 | 博客
  • 博客访问: 12297320
  • 博文数量: 1293
  • 博客积分: 13501
  • 博客等级: 上将
  • 技术积分: 17974
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-08 18:11
文章分类

全部博文(1293)

文章存档

2019年(1)

2018年(1)

2016年(118)

2015年(257)

2014年(128)

2013年(222)

2012年(229)

2011年(337)

分类:

2011-12-08 13:36:22

一、参考代码

  1. #include<stdio.h>
  2. #include <stdlib.h>
  3. /****************************************
  4. **选择排序法对十个整数进行排序 ***
  5. ****************************************/
  6. //n为数组长度;
  7. void sort(int a[],int n)
  8. {
  9.     int temp,min;
  10.     int i=0;
  11.     for(;i<n;i++)
  12.     {
  13.         min=i; //先假设最小下标为i
  14.         int j=i+1;
  15.         for(;j<n;j++)
  16.         if(a[j]<a[min])
  17.             min=j; //对i之后的数进行扫描将最小的数赋予min
  18.         if(min!=i)
  19.         {
  20.             temp=a[i];
  21.             a[i]=a[min];
  22.             a[min]=temp;
  23.         } //判断min与i是否相等,若=则说明原假设正确反之交换数值
  24.         printf("No.%d,i=%d,min=%d\t",i+1,i,min);
  25.         int k = 0;
  26.         for(;k<10;k++)
  27.         {
  28.             if(k==i)
  29.                 printf(" [%d], ",a[k]);
  30.             else
  31.                 printf(" %d, ",a[k]);
  32.         }
  33.         printf("\n");
  34.     }
  35. }

  36. //用main函数验证
  37. int main()
  38. {
  39.     system("clear");
  40.     int a[10]={85,66,34,86,52,74,61,25,24,11};
  41.     int i=0;
  42.     printf("provide you with ten numbers:\n");
  43.     for(;i<10;i++)
  44.         printf("%d,",a[i]);
  45.     printf("\n");
  46.     printf("________________________________________________________________\n");
  47.     sort(a,10);
  48.     printf("After selection sort:\n");
  49.     printf("________________________________________________________________\n");
  50.     for(i=0;i<10;i++)
  51.         printf("%d,",a[i]);
  52.     printf("\n");
  53.     return 0;
  54. }

 

二、运行效果

  1. provide you with ten numbers:
  2. 85,66,34,86,52,74,61,25,24,11,
  3. ________________________________________________________________
  4. No.1,i=0,min=9 [11], 66, 34, 86, 52, 74, 61, 25, 24, 85,
  5. No.2,i=1,min=8 11, [24], 34, 86, 52, 74, 61, 25, 66, 85,
  6. No.3,i=2,min=7 11, 24, [25], 86, 52, 74, 61, 34, 66, 85,
  7. No.4,i=3,min=7 11, 24, 25, [34], 52, 74, 61, 86, 66, 85,
  8. No.5,i=4,min=4 11, 24, 25, 34, [52], 74, 61, 86, 66, 85,
  9. No.6,i=5,min=6 11, 24, 25, 34, 52, [61], 74, 86, 66, 85,
  10. No.7,i=6,min=8 11, 24, 25, 34, 52, 61, [66], 86, 74, 85,
  11. No.8,i=7,min=8 11, 24, 25, 34, 52, 61, 66, [74], 86, 85,
  12. No.9,i=8,min=9 11, 24, 25, 34, 52, 61, 66, 74, [85], 86,
  13. No.10,i=9,min=9 11, 24, 25, 34, 52, 61, 66, 74, 85, [86],
  14. After selection sort:
  15. ________________________________________________________________
  16. 11,24,25,34,52,61,66,74,85,86,
  17. [root@localhost select_sort]#

 

三、一点分析

   选择法排序原理:一次选定数组中的每一个数,记下当前位置并假设它是从当前位置开始后面数中的最小数min=i,从这个数的下一个数开始扫描直到最后一个数,并记录下最小数的位置min,扫描结束后如果min不等于i,说明假设错误,则交换min与i位置上数

 

image

阅读(2627) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~