您的位置:首页 > 编程语言 > Java开发

java算法之选择排序

2016-12-06 17:25 387 查看
Android面试时经常也会被问到数据结构算法的问题,最近有时间,写点实例。

我模拟的场景是对一个班上学生成绩进行排名。

选择排序原理:

选择排序的思想非常直接,不是要排序么?那好,我就从所有序列中先找到最小的,然后放到第一个位置。之后再看剩余元素中最小的,放到第二个位置……以此类推,就可以完成整个的排序工作了。

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.拓展内容

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息