Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1686989
  • 博文数量: 511
  • 博客积分: 967
  • 博客等级: 准尉
  • 技术积分: 2560
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-06 14:19
文章分类

全部博文(511)

文章存档

2016年(11)

2015年(61)

2014年(257)

2013年(63)

2012年(119)

分类: C/C++

2014-05-17 22:46:54

本文的copyleft归gfree.wind@gmail.com所有,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,注明原作者及原链接,严禁用于任何商业用途。
作者:gfree.wind@gmail.com
博客:linuxfocus.blog.chinaunix.net
  

从最最基础的算法开始温习,不考虑通用性,都是对整数数组进行排序。——各位兄弟,原谅我重新制作车轮吧。。。。

1. 选择排序
思想是通过每次选择最小值,次小值,次次小值等,将其置换到对应的位置,从而依次选择,最后实现最终的排序。
  1. void selection_sort(int *array, int size)
  2. {
  3.     int i, j, t, min;
     
     /* 依次选择最小值, 最后一个元素不需要比较 */
  1.     for (i = 0; i < size-1; ++i) {
  2.         min = i;
  3.         /* 找出本次的最小值 */
  4.         for (j = i+1; j < size; ++j) {
  5.             if (array[j] < array[min]) {
  6.                 min = j;
  7.             }
  8.         }
  9.         
  10.         /* 需要置换 */
  11.         if (min != i) {
  12.             /* 置换本次最小值 */
  13.             t = array[min];
  14.             array[min] = array[i];
  15.             array[i] = t;
  16.         }
  17.     }
  18. }

2. 插入排序
思想是视元素左侧的所有元素为已排序的,然后将该元素插入到合适的位置,从而维持左侧所有元素有序。这样依次进行,当遍历完所有元素时,则排序完成
  1. void insertion_sort(int *array, int size)
  2. {
  3.     int i, j, t;
     /* 从第二个元素开始进行插入排序 */
  1.     for (i = 1; i < size; ++i) {
  2.         /* 因为可能需要将前面已排序元素后移,所有需要记住当前元素值 */
  3.         t = array[i];
  4.         /* 找到当前元素在已排序元素中插入的位置 */
  5.         for (j = i-1; j >=0; --j) {
  6.             if (array[j] > t) {
  7.                 /* 后移该元素 */
  8.                 array[j+1] = array[j];
  9.             }
  10.             else {
  11.                 /* 找到了合适的位置 */
  12.                 break;
  13.             }
  14.         }
  15.         array[j+1] = t;
  16.     }
  17. }


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