选择排序 -- java实现

本文详细介绍了简单选择排序的原理和过程,通过实例演示了如何在数组中找出最小元素并将其放置于正确位置,最终实现整个数组的排序。文章还提供了Java代码实现,展示了外部循环用于遍历数组,内部循环用于比较未排序部分的最小值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原理:每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕。也就是:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。

简单选择排序的基本思想:给定数组:int[] arr={里面n个数据};第1趟排序,在待排序数据arr[1]~arr[n]中选出最小的数据,将它与arrr[1]交换;第2趟,在待排序数据arr[2]~arr[n]中选出最小的数据,将它与r[2]交换;以此类推,第i趟在待排序数据arr[i]~arr[n]中选出最小的数据,将它与r[i]交换,直到全部排序完成。
 

举例:

arr[] = {3,6,2,7,4,1}
--------------------------------------
第一趟: 1最小,与3交换位置  1,6,2,7,4,3
--------------------------------------
第二趟: 2最小,与6交换位置  1,2,6,7,4,3
--------------------------------------
第三趟: 3最小,与6交换位置  1,2,3,7,4,6
--------------------------------------
第四趟: 4最小,与7交换位置  1,2,3,4,7,6
--------------------------------------
第五趟: 6最小,与7交换位置  1,2,3,4,6,7
--------------------------------------

代码思路
分成两个循环:第一次循环选择的是数组遍历,第二次为未排序的数组遍历及比较。

代码实现

package cn.janson.sort;

public class SelectSort {
	
	public static void selectSort(int[] arr) {
		 //选择排序的优化
        for(int i = 0; i < arr.length - 1; i++) {// 做第i趟排序
            int k = i;
            for(int j = k + 1; j < arr.length; j++){// 选最小的记录
                if(arr[j] < arr[k]){ 
                    k = j; //记下目前找到的最小值所在的位置
                }
            }
            //在内层循环结束,也就是找到本轮循环的最小的数以后,再进行交换
            if(i != k){  //交换a[i]和a[k]
                int temp = arr[i];
                arr[i] = arr[k];
                arr[k] = temp;
            }    
        }
	}
	
	public static void main(String[] args) {
		int[] arr={3,6,2,7,4,1};
        System.out.println("交换之前:");
        for(int num:arr){
            System.out.print(num+" ");
        }
        selectSort(arr);
        System.out.println();
        System.out.println("交换后:");
        for(int num:arr){
            System.out.print(num+" ");
        }
	}
}

测试效果

交换之前:
3 6 2 7 4 1 
交换后:
1 2 3 4 6 7

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值