java算法之选择排序
2016-12-06 17:25
387 查看
Android面试时经常也会被问到数据结构和算法的问题,最近有时间,写点实例。
我模拟的场景是对一个班上学生成绩进行排名。
选择排序原理:
选择排序的思想非常直接,不是要排序么?那好,我就从所有序列中先找到最小的,然后放到第一个位置。之后再看剩余元素中最小的,放到第二个位置……以此类推,就可以完成整个的排序工作了。
1.Person.java实体类
2.准备数据
3.选择排序
5.拓展内容
我模拟的场景是对一个班上学生成绩进行排名。
选择排序原理:
选择排序的思想非常直接,不是要排序么?那好,我就从所有序列中先找到最小的,然后放到第一个位置。之后再看剩余元素中最小的,放到第二个位置……以此类推,就可以完成整个的排序工作了。
1.Person.java实体类
package com.demo.sort; public class Person { /** * 名字 */ public String name; /** * 分数 */ public int score; public Person(String name, int score) { super(); this.name = name; this.score = score; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getScore() { return score; } public void setScore(int score) { this.score = score; } public String toString() { return ""+score+""; } }
2.准备数据
package com.demo.sort; public class DataUtil { Person person1 = new Person("张一",60); Person person2 = new Person("张二",82); Person person3 = new Person("张三",23); Person person4 = new Person("张四",31); Person person5 = new Person("张五",55); Person person6 = new Person("张六",89); Person person7 = new Person("张七",92); Person person8 = new Person("张八",48); Person person9 = new Person("张九",50); Person person10 = new Person("张十",23); Person [] persons = { person1,person2,person3,person4,person5, person6,person7,person8,person9,person10 }; public Person[] getData(){ return persons; } }
3.选择排序
package com.demo.sort; /** * 冒泡排序 * @author http://blog.csdn.net/nnmmbb * */ public class SortDemo { public static void main(String args[]){ Person [] persons = new DataUtil().getData(); beforeSort(persons); //选择排序 selectSort(persons); } /** * 直接选择排序 * @param persons */ public static void selectSort(Person [] persons){ for(int i= 0;i<persons.length;i++){ //最小值的位置 int minIndex = i; //一次遍历完,找到最小值的位置 for(int j=i;j<persons.length;j++){ //如果第j个位置的值比我现在认为的最小值还小,最小值的位置就要改变了 if(persons[j].score<persons[minIndex].score){ minIndex = j; } } //上面一轮遍历完,找到最小值的位置 //将最小值与第i个元素调换位置 Person temp; temp = persons[i]; persons[i] = persons[minIndex]; persons[minIndex] = temp; afterSort(i,persons); } } private static void afterSort(int index,Person[] persons) { System.out.print("round " +index+ " sort:"); for(int i=0;i<persons.length;i++){ if(i == index){ System.out.print(" ["+ persons[i].toString() +"]"); }else{ System.out.print(" "+persons[i].toString()); } } System.out.println(); } private static void beforeSort(Person[] persons) { System.out.print("before sort:"); for(int i=0;i<persons.length;i++){ System.out.print(" "+persons[i].toString()); } System.out.println(); System.out.println(); } }4.结果演示
before sort: 60 82 23 31 55 89 92 48 50 23 round 0 sort: [23] 82 60 31 55 89 92 48 50 23 round 1 sort: 23 [23] 60 31 55 89 92 48 50 82 round 2 sort: 23 23 [31] 60 55 89 92 48 50 82 round 3 sort: 23 23 31 [48] 55 89 92 60 50 82 round 4 sort: 23 23 31 48 [50] 89 92 60 55 82 round 5 sort: 23 23 31 48 50 [55] 92 60 89 82 round 6 sort: 23 23 31 48 50 55 [60] 92 89 82 round 7 sort: 23 23 31 48 50 55 60 [82] 89 92 round 8 sort: 23 23 31 48 50 55 60 82 [89] 92 round 9 sort: 23 23 31 48 50 55 60 82 89 [92]
5.拓展内容
相关文章推荐
- JavaScript演示排序算法
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- C#递归算法之分而治之策略
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- C#算法之大牛生小牛的问题高效解决方法
- C#算法函数:获取一个字符串中的最大长度的数字
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- 经典排序算法之冒泡排序(Bubble sort)代码
- Android数据加密之异或加密算法的实现方法
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- 算法之排序算法的算法思想和使用场景总结