java算法之选择排序

61 篇文章 0 订阅

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



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值