参考代码如下,可以按需求自己修改
import java.util.Datepublic class SortThread {
public static void main(String[] args) {
//产生一个随机数组
int[] ary = getArray()
//启动冒泡排序线程
new Thread(new MaoPao(ary)).start()
//启动快速排序线程
new Thread(new KuaiSu(ary)).start()
}
private static int[] getArray() {
//建议数字n不要超过1百万,十万左右就好了
int n = (int) (Math.random()*1000000)+11
int[] ary= new int[n]
System.out.println("n的值是" + n)
for (int i = 0 i < ary.length i++) {
ary[i] = (int) (Math.random()*100000)
}
return ary
}
}
//冒泡排序
class MaoPao implements Runnable {
int[] ary
public MaoPao(int[] ary) {
this.ary = ary
}
@Override
public void run() {
long st = System.currentTimeMillis()
System.out.println(new Date() + "冒泡排序线程:开始执行排序")
for (int i = 0 i < ary.length - 1 i++) {
for (int j = 0 j < ary.length - i - 1 j++) {
if (ary[j] < ary[j + 1]) {
int temp = ary[j]
ary[j] = ary[j + 1]
ary[j + 1] = temp
}
}
}
long et = System.currentTimeMillis()
System.out.println(new Date() + "冒泡排序线程完成排序,耗费时间" + (et - st) + "毫秒")
for (int i = 0 i < ary.length i++) {
System.out.println(ary[i]+" ")
}
}
}
//快速排序
class KuaiSu implements Runnable {
int[] ary
public KuaiSu(int[] ary) {
this.ary = ary
}
@Override
public void run() {
long st = System.currentTimeMillis()
System.out.println(new Date() + "快速排序线程:开始执行排序")
quickSort(ary, 1, ary.length)
long et = System.currentTimeMillis()
System.out.println(new Date() + "快速排序线程排序完成,耗费时间" + (et - st) + "毫秒")
for (int i = 0 i < ary.length i++) {
System.out.println(ary[i]+" ")
}
}
public static int Partition(int a[], int p, int r) {
int x = a[r - 1]
int i = p - 1
int temp
for (int j = p j <= r - 1 j++) {
if (a[j - 1] <= x) {
i++
temp = a[j - 1]
a[j - 1] = a[i - 1]
a[i - 1] = temp
}
}
temp = a[r - 1]
a[r - 1] = a[i + 1 - 1]
a[i + 1 - 1] = temp
return i + 1
}
public static void quickSort(int a[], int p, int r) {
if (p < r) {
int q = Partition(a, p, r)
quickSort(a, p, q - 1)
quickSort(a, q + 1, r)
}
}
}
这是算法层面的问题,和java没有什么关系选择排序和冒泡排序都是基于元素交换的,因此你的分类错误
冒泡排序基本思想:每次将最重的一个沉入海底
选择排序基本思想:每次扫描最重的一个与第一个交换
并且,选择和冒泡的时间复杂度是一样的(都是O(N^2))
所以在实际生活中作用不大,一般的语言(比如java,c++,c)都有实现好的排序算法
比如c语言中的qsort(采用快速排序),c++的stl里面的sort(采用多种方式混合式排序)
java里面的sort方法(也是混合式排序,元素少的时候用了冒泡,元算多的时候用了归并排序)
当然算法是要学习的,这些算法自己都要理解,用的时候呢,就用现成的就好了,如果有特殊需求的排序,当然你可以自己实现比较器