选择式排序法之选择排序法实现 -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; iint t =(int)(Math.random()*10000);
   arr[i] =t;
  }

  Selection selection = new  Selection();
  selection.Test();
  selection.Sort(arr);
  selection.Test();
  /*for(int i=0; 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; j1; j++)
  {
   //每趟选择排序中默认第一个元素是最小的
   min = arr[j];
   minIndex = j;
   //内层循环找到这趟的最小值min
   for(int k =j+1; kif(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

你可能感兴趣的:(经典算法实现)