Java 简单选择排序算法,排序系列 之 简单选择排序及其改进算法 —— Java实现...

简单选择排序算法:

基本思想:

在待排序数据中,选出最小的一个数与第一个位置的数交换;然后在剩下的数中选出最小的数与第二个数交换;依次类推,直至循环到只剩下两个数进行比较为止。

实例:

0.初始状态 3,1,5,7,2,4,9,6(共8个数)

1.n=8 个数中,最小数值为1,与第一个数交换:1,3,5,7,2,4,9,6

2.剩下 n-1=7 个数中,最小数值为2,与第二个数交换:1,2,5,7,3,4,9,6

3.剩下 n-2=6 个数中,最小数值为3,与第三个数交换:1,2,3,7,5,4,9,6

4.剩下 n-3=5 个数中,最小数值为4,与第四个数交换:1,2,3,4,5,7,9,6

5.剩下 n-4=4 个数中,最小数值为5,与第五个数交换:1,2,3,4,5,7,9,6

6.剩下 n-5=3 个数中,最小数值为6,与第五个数交换:1,2,3,4,5,6,9,7

7.剩下 n-6=2 个数中,最小数值为7,与第五个数交换:1,2,3,4,5,6,7,9

简单选择排序算法的改进:

基本思想:

简单选择排序算法,每次只选择一个数据放在正确的位置,为提高效率,可每次选择两个数据,放在正确的位置,及每次选择最大值和最小值。

实例:

0.初始状态 3,1,5,7,2,4,9,6(共8个数)

1.n=8 个数中,最小数值为1,与第一个数交换;最大数值为9,与最后一个数交换:1,3,5,7,2,4,6,9

2.剩下n-2=6个数中,最小数值为2,与第二个数交换;最大数值为7,与倒数第二个数交换:1,2,5,6,3,4,7,9

3.剩下n-4=4个数中,最小数值为3,与第三个数交换;最大数值为6,与倒数第三个数交换:1,2,3,4,5,6,7,9

4.剩下n-6=2个数中,最小数值为4,与第四个数交换;最大数值为5,与倒数第四个数交换:1,2,3,4,5,6,7,9

Java实现:

/**

* 选择排序 及其 改进算法 的实现

* 不稳定算法

* @author 那一季的银杏叶

*

*/

public class SelectSort {

public static void main(String[] args) {

// TODO Auto-generated method stub

new SelectSort().run();

}

public void run(){

int a[] = {3,1,5,7,2,4,9,6};

/**

* 选择排序

*/

selectSort(a);

/**

* 选择排序的改进--二元选择排序

*/

selectTwoSort(a);

}

/**

* 选择排序 每次选出最小的元素

* @param a

*/

private void selectSort(int[] a) {

// TODO Auto-generated method stub

System.out.println("———————————————————选择排序算法———————————————————");

int n=a.length;

for(int i=0;i

int k=i;

for(int j=i;j

if(a[j] < a[k]){

k=j;

}

}

if(k != i){

int temp = a[i];

a[i]=a[k];

a[k] = temp;

}

print(a,n,i);

}

printResult(a,n);

}

/**

* 选择排序的 改进算法

* 每次选出最大的数和最小的数

* @param a

*/

private void selectTwoSort(int[] a){

System.out.println("———————————————选择排序算法——的改进—————————————————");

int n=a.length;

int i,j,max,min,temp;

for(i=0;i

max=i;

min=i;

for(j = i+1;j

if(a[j]

min=j;

}

if(a[j]>a[max]){

max=j;

}

}

temp = a[i];

a[i] = a[min];

a[min] = temp;

temp = a[n-i-1];

a[n-i-1] = a[max];

a[max] = temp;

print(a,n,i);

}

printResult(a,n);

}

/**

* 打印排序的最终结果

* @param a

* @param n

*/

private void printResult(int[] a, int n){

System.out.print("最终排序结果:");

for(int j=0;j

System.out.print(" "+a[j]);

}

System.out.println();

}

/**

* 打印排序的每次循环的结果

* @param a

* @param n

* @param i

*/

private void print(int[] a, int n, int i) {

// TODO Auto-generated method stub

System.out.print("第"+i+"次:");

for(int j=0;j

System.out.print(" "+a[j]);

}

System.out.println();

}

}

运行结果展示:

e78f13799bf97f6adc9bdef9831d635c.png

(本文仅供学习交流,如有更好的思路,欢迎留下意见供大家探讨学习~)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值