免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6040 | 回复: 4
打印 上一主题 下一主题

选择排序算法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-07-22 17:36 |只看该作者 |倒序浏览
选择排序:比如在一个长度为N的无序数组中,在第一趟遍历N个数据,找出其中最小的数值与第一个元素交换,第二趟遍历剩下的N-1个数据,找出其中最小的数值与第二个元素交换......第N-1趟遍历剩下的2个数据,找出其中最小的数值与第N-1个元素交换,至此选择排序完成。

选择排序的Java实现:
  1. package com.mianshi.easy;
  2. public class Selection {

  3.     public static void main(String[] args) {
  4.         int[] a = {3,11,12,15,4,6,9,8,7};

  5.         selectionSort(a);

  6.         for(int i = 0; i < a.length; i++){
  7.             System.out.print(a[i]+" ");
  8.         }
  9.     }

  10.     public static void selectionSort(int[] a)
  11.     {
  12.         for(int i=0; i<a.length; i++)
  13.         {
  14.             int k = i;      
  15.             for(int j = i+1; j<a.length; j++)
  16.             {
  17.                 if(a[k] > a[j])
  18.                 {
  19.                     k = j;
  20.                 }
  21.             }
  22.             //若k不等于i;说明至少存在一个元素小于自定义的最小值,并得到该元素的下标,用于交换
  23.             if(k != i)
  24.             {
  25.                 int temp = a[i];
  26.                 a[i] = a[k];
  27.                 a[k] = temp;
  28.             }
  29.         }
  30.     }
  31. }
复制代码
代码中k的作用类似于一个指针,指向最小的数。



算法稳定性:不稳定的排序算法。选择排序是不稳定的(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面)。

时间复杂度:平均时间复杂度为

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
2 [报告]
发表于 2015-08-12 11:12 |只看该作者
我觉得经典算法还是应该用C语言来讲解。

论坛徽章:
0
3 [报告]
发表于 2015-09-02 19:32 |只看该作者
回复 2# renxiao2003
请问为什么经典的算法用C语言来讲解呢?

   

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
4 [报告]
发表于 2015-09-03 21:50 |只看该作者
高级语言(面向对象语言)讲解算法显得不伦不类。

论坛徽章:
1
综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00
5 [报告]
发表于 2015-10-03 11:54 |只看该作者
虽然简单,也很好。用Java实现挺好,有很多Java实现的数据结构与算法的书。说不伦不类,一定是看书太少的缘故。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP