登陆 注册

java算法实现之选择排序

守望者 2020-04-07 226人围观 ,发现0个评论 java


      所谓选择排序就是首先找出数组的一个元素作为比较参考值 a(从数组第0个元素开始,每轮比较结束后a将转为下一个数组元素),

将a元素与其右边的每一个数组元素进行比较,得出最小值min,而后将a与min两个元素位置进行替换,如此完成即一轮比较,

被比较的数组可分为左右两个部分,其中左边为已经完成排序的部分,每轮比较完成后其元素个数将递增一,

右边部分的元素是没有完成排序的,而且每轮比较都会被元素a进行逐个比较大小,每轮完成后其元素个数将递减一,

当左边整个范围完全覆盖数组或右边范围缩小为0,整个排序完成。


     其排序实现过程效果图如下,其中竖斜杠左边为已排序完成的部分,右边为没有完成排序的:


QQ截图20200407120654.jpg


     通过将选择排序与冒泡排序进行比较,二者异同如下:小伙伴们可以参考这篇文章具体找下二者异同:java算法实现之冒泡排序


相同部分:

   

  1.  二者都是先找出最大元素而后再找出更小的元素,或先找出最小的元素再找出更大的元素,

        从形式上看类似于“一个一个的”排序

  2. 比较过程中二者都有一个“已完成排序数列”和“未完成排序数列”,

     并且“已完成排序数列”逐级变大,“未完成排序数列”逐级变小。


不同部分:


1. 从排序形式上看:

     冒泡排序是从数组右边向左进行排序,排序完成部分放在右边;

      选择排序是从数组左边向右进行排序,排序完成部分放在左边;


2. 从排序元素上看:

    在升序排序时冒泡排序是先找出最大元素,而后元素值逐级减小;

    选择排序是先找出最小元素,而后元素值逐级增大;


3. 从排序过程中看:

     冒泡排序在比较过程中是从左向右两个两个对比(冒泡形式)找出最小值并实时交换位置;

     选择排序在比较过程中是将参考值与“右部分”元素一一对比找出最小值,每轮比较完成后才交换位置;


选择排序实现函数sort代码如下:


public class Select {

	public static void sort(int[] arr) {
		
		for(int i=0;i<arr.length;i++) {
			
			int min_value = arr[i];
			int min_index = i;
			
			for(int j=min_index+1;j<arr.length;j++) {
			  
				 if(min_value>arr[j]) {
					   min_value = arr[j];
					   min_index = j;
				 } // if
			}  // for
			
			int temp = arr[i];
			arr[i] = min_value;
			arr[min_index] = temp;
			
		 System.out.print("第"+(i+1)+"轮排序:");
		 
		 for(int j = 0;j<arr.length;j++) {
			 
			 System.out.print(arr[j]+" ");
			 if(j==i) {System.out.print("  |  ");}
		 }
		 
		 System.out.println();
		}
	}
	
	public static void main(String[] args) {
		
		  int[] arr = {15,8,3,9,21,28,19,12};
		  sort(arr);
		  
		  System.out.println();
		  System.out.print("最终结果:");
		  for(int i=0;i<arr.length;i++) {
			  System.out.print(arr[i]+" ");
		}
	 }


    转载请注明本文链接:https://tufeng.xyz/java/42.html,谢谢合作。

请发表您的评论
请关注微信公众号
微信二维码