选择式排序法之选择排序法实现 -java版

计算算法时间复杂度比冒泡快一点
选择排序法核心思想是,第一次从R[0] ~R[n-1]中选择最小值然后与R[0]交换,第二次从R[1] ~R[n-1]中选取最小值与R[1]交换………第i次呢就是从R[i-1] ~R[n-1]中选取最小值,与R[i-1]元素交换;对于一个含有n个元素的数组,最多交换n-1次就得到了一个排序码从小到大的有序序列。

package com.PengRong.A;
import java.util.*;
/**
 *
 * @author PengRong
 *
 */
public class DemoSelection
{
 public static void main(String[] args)
 {
  // TODO Auto-generated method stub
  //随机产生一万个测试数据
  int len=10000;
  int[] arr =new int[len];
  for(int i=0; i<len; i++)
  {
   int t =(int)(Math.random()*10000);
   arr[i] =t;
  }

  Selection selection = new  Selection();
  selection.Test();
  selection.Sort(arr);
  selection.Test();
  /*for(int i=0; i<arr.length; i++)
  {
   System.out.println("arr[" +i+ "]="+arr[i]);
  }*/
 }
}
/**
 * @功能:选择排序实现;
 * 选择排序的思想是一次次将最小值放到前面的有序序列
 * @author PengRong
 *
 */
class Selection
{
 /**
  * @author PengRong
  * @功能:用于计算当前的系统时间
  */
 public void Test()
 {
  Calendar cal =Calendar.getInstance();
  System.out.println(cal.getTime());
 }
 public void Sort(int[] arr)
 {
  int temp = 0;//交换时候计入中间值
  int min = 0;//最小值
  int minIndex = 0;//最小值的索引
  //外层循环控制次数,对于一个含有n个元素的数组来说只需要循环n-1次就可以了。
  for(int j=0; j<arr.length-1; j++)
  {
   //每趟选择排序中默认第一个元素是最小的
   min = arr[j];
   minIndex = j;
   //内层循环找到这趟的最小值min
   for(int k =j+1; k<arr.length; k++)
   {
    if(min > arr[k])
    {
     min = arr[k];
     minIndex = k;
    }

   }
   //如果找到了最小值与默认最小值不一致,交换arr[j]与arr[minIndex]的数值
   if(minIndex != j)
   {
    temp = arr[j];
    arr[j] = arr[minIndex];
    arr[minIndex] = temp;
   }

  }

 }
}

该历程实现了对选择排序系统时间的显示,可以看到当参数数据在 int len=10000; 一万级别时候算法是非常快的,系统时间看不出有流失

当int len =80000;用了8s

当int len =100000;用了13s

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值