Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1317582
  • 博文数量: 168
  • 博客积分: 2124
  • 博客等级: 大尉
  • 技术积分: 2590
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-16 23:51
文章分类

全部博文(168)

文章存档

2014年(6)

2013年(74)

2012年(71)

2011年(17)

分类: C/C++

2013-08-19 21:23:51

这个方法的思路也比较容易理解

最终排序的时间是比较的次数与交换的次数的总和  , 这种方法最差的时候交换次数是n-1次,但是还是需要 1+2+3+...+n-1次比较

即时间复杂度为O(n2)

算法模型在这里


点击(此处)折叠或打开

  1. #include<stdio.h>

  2. void swap(int *p1, int *p2)
  3. {
  4.     int tmp;
  5.     tmp = *p1;
  6.     *p1 = *p2;
  7.     *p2 = tmp;
  8. }
  9. /**************************************************
  10. 编程思想:
  11. 总思路:每次一趟找到最小的一个数
  12. .每一趟假设i下标的值最小,每次比较与新下标的值比较,如果有更小的值,记下其下标,循环知道第n个
  13. .如果下标与初始的i不同,交换,那么就找到最小的值了
  14. .i+1开始找到倒数第二小的值......
  15. **************************************************/
  16. void simple_select_sort(int *src, int n)
  17. {    
  18.     int i, j, min;
  19.     for(i = 0; i < n - 1; i++)
  20.     {    
  21.         min = i;
  22.         for(j = i + 1; j < n; j++)
  23.             if(src[j] < src[min])
  24.                 min = j; //找出最小的小标
  25.         
  26.         if(min != i)a
  27.             swap(&src[min], &src[i]);        //交换    
  28.     }
  29. }

  30. int main(int argc, char **argv)
  31. {
  32.     int i;a
  33.     int p[9] = {0, 30, 155, 1, 80, 300, 170, 40, 99};
  34.     
  35.     simple_select_sort(p, 9);
  36.     
  37.     for(i = 0; i < 9; i++)
  38.         printf("p[%d] = %d\n", i, p[i]);
  39.     while(1);    
  40.     
  41. }

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