计算算法时间复杂度比冒泡快一点
选择排序法核心思想是,第一次从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
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-07 03:43:55