选择排序
选择排序属于内部排序法,是从欲排序的数据中,按指定的规则选出某一元素,再依规定交换位置后达到排序的目的。
基本思想
第一次从数组中选取最小值,与数组中第一个数据进行交换,第二次再从除第一个元素以外的剩余数据中选取最小值,与数组中第二个数据交换,以此类推直到第n-1取最小值交换,得到从小到大的递增数组。
package Sort;
import java.text.SimpleDateFormat;
import java.util.Date;
//选择递增排序
public class SelectSort {
public static void main(String[] args) {
//int arr[]={2,8,6,-1,-2,10,7};
int arr[]=new int[100000];
for (int i=0;i<100000;i++)
{
arr[i]=(int)(Math.random()*10000000);
}
int t=0;
int temp=0;
System.out.print("排序开始:");
Date date1=new Date();
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd,HH:mm:ss:SSS");
String date1str=simpleDateFormat.format(date1);
System.out.println(date1str);
for (int i=0;i< arr.length-1;i++)//确定第i+1个数
{
t=i;
for (int j=i;j< arr.length;j++)//循环遍历找到i及后面的最小值
{
if (arr[t]>arr[j])
t=j;
}
if (t==i) continue;
//将找到的最小值与第i+1个数换位
temp=arr[t];
arr[t]=arr[i];
arr[i]=temp;
}
// for (int i=0;i< arr.length;i++)
// {
// System.out.println(arr[i]);
// }
System.out.print("排序完成:");
Date date2=new Date();
String date2str=simpleDateFormat.format(date2);
System.out.println(date2str);
}
}
(代码展示为排序时间,具体输入输出在注释部分)
插入排序
插入排序属于内部排序法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的。
基本思想
把n个待排序的元素看成为一个有序表和一个无无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素(即除第一个元素),排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将他插入带有序表中的适当位置,使之成为新的有序表。
package Sort;
import java.text.SimpleDateFormat;
import java.util.Date;
//插入递增排序
public class InsertSort {
public static void main(String[] args) {
//int arr[]={2,8,6,-1,-2,10,7};
int arr[]=new int[100000];
for (int i=0;i<100000;i++)
{
arr[i]=(int)(Math.random()*10000000);
}
System.out.print("排序开始:");
Date date1=new Date();
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd,HH:mm:ss:SSS");
String date1str=simpleDateFormat.format(date1);
System.out.println(date1str);
int insertValue=0;
int insertIndex=0;
for (int i=1;i< arr.length;i++)//将第一个元素视为有序表,所以从第二个(索引为1)开始循环排序
{
insertValue=arr[i];//将无序表中进行插入操作的数贮存起来,防止进行比较时有序表后移造成的数据丢失
insertIndex=i-1;//找到有序表的表尾索引
while(insertIndex>=0&&insertValue<arr[insertIndex])//循环将待插入的数值与有序表自表尾依次比较
{
arr[insertIndex+1]=arr[insertIndex];//插入数值小于有序表中的数值,则有序表该位置向后移动一位
insertIndex--;//索引前进,继续与有序表进行比较
}
arr[insertIndex+1]=insertValue;//插入数值大于有序表中的数值或全部比较完毕,则将待插入的数插入到当前索引+1 的位置
}
// for (int i=0;i< arr.length;i++)
// {
// System.out.println(arr[i]);
// }
System.out.print("排序完成:");
Date date2=new Date();
String date2str=simpleDateFormat.format(date2);
System.out.println(date2str);
}
}
(代码效应同上述)