自娱自乐快速排序
public class QuickSort {
private static final Scanner scanner = new Scanner(System.in);
private static final Random random = new Random();
public static void main(String[] args)
{
start(false);
}
public static Integer[] quickSort(Integer[] arr, int low, int high)
{
int i, j, temp, t;
if (low > high)
{
return arr;
}
i = low;
j = high;
temp = arr[low];
while (i < j)
{
while (temp <= arr[j] && i < j)
{
j--;
}
while (temp >= arr[i] && i < j)
{
i++;
}
if (i < j)
{
t = arr[j];
arr[j] = arr[i];
arr[i] = t;
}
}
arr[low] = arr[i];
arr[i] = temp;
arr = quickSort(arr, low, j - 1);
arr = quickSort(arr, j + 1, high);
return arr;
}
public static void start(boolean open_print)
{
int num = scanner();
if (num > 0)
{
sort(num, open_print);
start(open_print);
}
}
public static void sort(int num, boolean open_print)
{
long start_time;
long end_time;
long time;
List<Integer> arr = new ArrayList<>();
int seed = getSeed(num);
System.out.println("-----开始进行数组内容填充-----");
start_time = System.currentTimeMillis();
for (int j = 0; j < num; j++)
{
arr.add(random.nextInt(seed));
}
end_time = System.currentTimeMillis();
time = end_time - start_time;
System.out.println("-----数组内容填充完成-----填充用时 " + time + " 毫秒");
Integer[] arr1 = {};
System.out.println("-----------开始进行数组转换-------------");
start_time = System.currentTimeMillis();
Integer[] integers = arr.toArray(arr1);
end_time = System.currentTimeMillis();
time = end_time - start_time;
System.out.println("-----------数组转换完成-------------转换用时 " + time + " 毫秒");
System.out.println("-----------排序开始执行-------------");
start_time = System.currentTimeMillis();
arr = Arrays.asList(quickSort(integers, 0, arr.size() - 1));
end_time = System.currentTimeMillis();
time = end_time - start_time;
if (open_print)
{
System.out.println(Arrays.toString(arr.toArray()));
}
System.out.println("排序" + arr.size() + "个数字所用时间为 " + time + " 毫秒");
}
public static int getSeed(int num)
{
int seed = random.nextInt(num * 5);
if (seed < 0)
{
seed = getSeed(num);
}
return seed;
}
public static int scanner()
{
int num = 0;
try
{
System.out.println("请输入随机数组长度(输入exit退出):");
String next = scanner.next();
if ("exit".equals(next))
{
return 0;
}
num = Integer.parseInt(next);
} catch (Exception e)
{
System.out.println("输入有误,请输入数字!");
scanner();
}
return num;
}
}