【庖丁解题】排序算法之选择排序剖析

转载声明:商业转载请联系作者获得授权,非商业转载请注明出处.原文来自 © 呆萌钟【庖丁解题】排序算法之选择排序剖析

选择排序

从0索引开始,依次和后面元素比较,小的往前放,第一次完毕,最小值出现在了最小索引处。其它的同理,即可得到一个排好序的数组。

图解

第一轮:索引为0的元素按照顺序分别与其他索引元素进行比较,如果arr[0]>arr[i],交换他们之间的元素值,如下图

第二轮:索引为1的元素按照顺序分别与其他索引元素进行比较,如果arr[1]>arr[i],交换他们之间的元素值,如下图

第三轮:索引为2的元素按照顺序分别与其他索引元素进行比较,如果arr[2]>arr[i],交换他们之间的元素值,如下图

第四轮:索引为3的元素按照顺序分别与其他索引元素进行比较,如果arr[3]>arr[i],交换他们之间的元素值,如下图

经过四轮排序,可以发现我们的数组已经按照升序排好序了。

代码实现

根据上述图片,可以先把每轮的有代码实现

第一轮

int x=0;//标记用于比较的起始索引
for (int y=x+1;y<arr.length;y++) {//y表示用于和x比较的索引值
	if (arr[x] > arr[y]) {//比较大小
			//交换元素
			int temp = arr[x];
			arr[x] = arr[y];
			arr[y] = temp;
	}
}

第二轮

int x=1;//标记用于比较的起始索引
for (int y=x+1;y<arr.length;y++) {//y表示用于和x比较的索引值
	if (arr[x] > arr[y]) {//比较大小
			//交换元素
			int temp = arr[x];
			arr[x] = arr[y];
			arr[y] = temp;
	}
}

第三轮

int x=2;//标记用于比较的起始索引
for (int y=x+1;y<arr.length;y++) {//y表示用于和x比较的索引值
	if (arr[x] > arr[y]) {//比较大小
			//交换元素
			int temp = arr[x];
			arr[x] = arr[y];
			arr[y] = temp;
	}
}

第四轮

int x=3;//标记用于比较的起始索引
for (int y=x+1;y<arr.length;y++) {//y表示用于和x比较的索引值
	if (arr[x] > arr[y]) {//比较大小
			//交换元素
			int temp = arr[x];
			arr[x] = arr[y];
			arr[y] = temp;
	}
}

最终版

转化成循环表示如下:

		/**
     * 选择排序
     * @param arr
     * @return
     */
    public static int[] selectSort(int[] arr){
        for (int x = 0; x < arr.length - 1; x++) {//控制的是排序的轮数
            for (int y = x + 1; y < arr.length; y++) {//控制每轮比较的次数
                if (arr[x] > arr[y]) {//比较大小
										//交换元素
                    int temp = arr[x];
                    arr[x] = arr[y];
                    arr[y] = temp;
                }
            }
        }
        return arr;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值