Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2119025
  • 博文数量: 249
  • 博客积分: 1305
  • 博客等级: 军士长
  • 技术积分: 4733
  • 用 户 组: 普通用户
  • 注册时间: 2011-12-17 10:37
个人简介

不懂的东西还有很多,随着不断的学习,不懂的东西更多,无法消灭更多不懂的东西,那就不断的充实自己吧。 欢迎关注微信公众号:菜鸟的机器学习

文章分类

全部博文(249)

文章存档

2015年(1)

2014年(4)

2013年(208)

2012年(35)

2011年(1)

分类: C/C++

2012-02-16 19:43:12

一、直接选择排序的思想


n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果:

1、  初始状态:无序区为array[1…n],有序区为空;

2、  第一趟排序:

在无序区array[1…n]中选出关键字最小的记录array[k],将它与无序区的第1个记录array[0]交换,使array[1..1]array[2…n]分别为记录个数增加1个的新有序区和记录个数减少1个的新无序区。

……..

3、第i趟排序

i趟排序开始时,当有序区和无序区分别为array[0…i-1]array[i…n-1]。该趟排序从当前无序区中选出关键字最小的记录array[k],将它与无序区的第1个记录array[i]交换。使R[1..i]R[i+1..n]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。

这样,n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果。


二、C代码实现

  1. #include "stdio.h"
  2. /*
  3. * 函数:choose_sort(int *array, int n)
  4. * 功能:插入排序
  5. * 参数:n为数组元素的个数
  6. */
  7. void choose_sort(int array[],int n)
  8. {
  9.     int i,j;
  10.     int b,temp,num;
  11.     for(i=0;i<n-1;i++)
  12.     {
  13.         temp=i;
  14.         for(j=i+1;j<n;j++)
  15.         {
  16.             if(array[j]<=array[temp])//获取待排序的元素中最小的元素
  17.             {
  18.                 temp=j;//记录最小元素的下标
  19.             }
  20.         }
  21.         if(i!=temp)
  22.         {
  23.             b=array[temp];
  24.             array[temp]=array[i];
  25.             array[i]=b;
  26.         }
  27.     }
  28. }
  29. int main(int argc,char *argv[])
  30. {
  31.     int array[]={3,8,4,7,1};
  32.     choose_sort(array,5);
  33.     for(int i=0;i<5;i++)
  34.     {
  35.         printf("%d ",array[i]);
  36.     }
  37.     printf("\n");
  38.     return 0;
  39. }

三、直接选择排序的时间

直接选择排序的平均时间复杂度为O(n*n),并且是一种不稳定的排序。

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