JAVA实现数字排序与查找
一、描述
- 随机参数500万个*无序不同*的整数;
- 计算产生这些数字的时间;
- 对500万个数字进行排序,快速排序和插入排序;
- 排序完成后可按*二分法查找*对应数字。
二、运行结果
-
生成随机数:
-
排序
-
查找
三、具体实现代码
package com.Text9_10;
import java.util.Random;
import java.util.Scanner;
public class RamdomNum {
int []num={1,2,3,4,5,6,7,8,9};
public void getNums() {
int numLenght=50000000;
System.out.println("===>>正在生成随机数请稍后...");
long star = System.nanoTime();//System.currentTimeMillis();
num = new int[numLenght];//存储500万个无序不相同的随机数
Random r = new Random();
int[] arrayLists[] = new int[1000][numLenght/1000];//将500万个不同数保存在1000个长度为5000的数组中,有利于快速生成
int indexNums[] = new int[1000];//保存0~1000的的差数列,之后会被打乱顺序,用于模拟随机插入到num[]中,使num[]中元素无序且不相同
for (int i = 0; i < indexNums.length; i++) {
indexNums[i] = i;
if (i > 10) {
for (int j = 0; j < i; j++) {
int num1 = r.nextInt(i / 2);
int num2 = r.nextInt(i / 2) + i / 2;
if (indexNums[num1] == 0 || indexNums[num2] == 0)
break;
else {
int temp = indexNums[num1];
indexNums[num1] = indexNums[num2];
indexNums[num2] = temp;
}
}
}
}
for (int j=0,i=0;j<indexNums.length;j++)
for (int k=0;k<arrayLists[0].length;)
arrayLists[j][k++]=( (i++) * 10 + r.nextInt(9) + 1);
Exchange(arrayLists,num,indexNums);
System.out.println("\n===>>生成成功!...\n================");
ShowResoult("生成","不同的随机数耗时",( ((System.nanoTime())- star)*0.000000001));
}
public void Exchange(int [][]item,int []object,int index[])
{
for (int j=item[0].length-1,objectIndex=0;j>=0;j--)
for (int i = 0; i < index.length; i++)
object[objectIndex++]= item[index[i]][j];
}
public void sort_Insert()//插入排序
{
System.out.println("===>>插入排序进行中,请稍后...");
long star=System.nanoTime();
for(int i=1;i<num.length;i++)
{
int temp;
for (int j=i;j>0&&(temp=num[i])<num[j-1];j--)
{
num[j]=num[j-1];
num[j-1]=temp;
}
}
System.out.println("===>>排序已结束!");
ShowResoult("插入排序对","不同的数排序耗时",(((System.nanoTime())-star)*0.000000001D));
}
public void Quick_Sort()
{
System.out.println("===>>快速排序进行中,请稍后...");
long star=System.nanoTime();
quickSort(num,0,num.length-1);
System.out.println("===>>排序已结束!");
ShowResoult("快速排序对","不同的数排序耗时",(((System.nanoTime())-star)*0.000000001D));
System.out.println();
}
private void quickSort(int []item,int star,int end)
{
if (star<end)
{
int temp=item[star];
int i=star,j=end;
while(i<j)
{
while(i<j&&item[j]>temp) j--;
item[i]=item[j];
while (i<j&&item[i]<=temp) i++;
item[j]=item[i];
}
item[i]=temp;
quickSort(item,star,i-1);
quickSort(item,i+1,end);
}
else
return;
}
public int TowAwaySearch(int []item,int value)
{
int low=0;
int height=num.length-1;
while(low<=height){
int middle=(low+height)/2;
if(value==item[middle]) return middle;
else if(value>item[middle]) low=middle+1;
if(value<item[middle]) height=middle-1;
}
return -1;
}
private void ShowResoult(String str,String str1,double time)
{
System.out.printf("%s%d个%s:%.9f秒\n",str,num.length,str1,time);
System.out.println("\n===>查看结果请【1】,结束请按【任意键】!");
Scanner s=new Scanner(System.in);
if (s.nextInt()==1) {
System.out.println();
for (int i = 0; i < num.length; i++) {
System.out.print(num[i]);
if ((i + 1) % 10 == 0)
System.out.println();
else {
for (int l = 0; l < 11 - Integer.toString(num[i]).length(); l++)
System.out.print(" ");
}
}
}
System.out.println();
}
}
😐