Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5084351
  • 博文数量: 553
  • 博客积分: 13864
  • 博客等级: 上将
  • 技术积分: 11041
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-28 21:25
个人简介

个人Blog: hhktony.com

文章分类

全部博文(553)

文章存档

2015年(1)

2014年(2)

2013年(12)

2012年(384)

2011年(154)

分类: LINUX

2012-09-06 21:47:39

1.基本思想
    选择排序的基本思想和冒泡排序有一点像,都是依次选择最小元素,次小元素…… ,但是和冒泡排序不同的是,冒泡排序发现小的就进行互换,但是选择排序是直接把小的放到应该出现的位置。
    即:
    首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾(目前已被排序的序列)。以此类推,直到所有元素均排序完毕。

2.选择排序的过程如下
    n个元素的数组可以经过n-1趟选择排序后得到有序的结果:初始状态:无序区pData[1,2,...n],有序区间为空。第一趟排序:在无序区pData[1,2,...n]中选择最小的元素pData[k],将他与第一个元素pData[1]交换,使得pData[1...1]和pData[2,3,...n],分别表示有序区和无序区。每一次循环,有序区的长度加一,同时无序区长度减一。这样n个元素的序列可以通过n-1趟排序得到有序的序列。

3.说明

    选择排序的时间复杂度为O(N^2),是原地排序,且不稳定排序。

4.实现

点击(此处)折叠或打开

  1. void selectSort(int *pData, int num)
  2. {
  3.     int i, j, index, temp;

  4.     for (i = 0; i < num - 1; i++)
  5.     {
  6.         index = i;

  7.         for (j = i+1; j < num; j++)
  8.         {
  9.             if (pData[j] < pData[index])
  10.                 index = j;
  11.         }

  12.         if (index != i)
  13.         {
  14.             temp = pData[i];
  15.             pData[i] = pData[index];
  16.             pData[index] = temp;
  17.         }
  18.     }
  19. }
阅读(3152) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~