smile908

导航

两种排序算法随想

冒泡排序,可直接运行,有需要可以直接copy带走

冒泡排序算是一种非常经典的排序吗,并不是说他的算法优秀,也不是说他的效率高,他作为最广为人知的一种排序算法,我们可以不用,但是必须要会是吧。

我们在进行一些面试的时候,写排序算法,我们可以不去研究快排,堆排,桶排等效率较高的排序算法,直接开写冒泡排序,真是万事皆可冒泡。

冒泡算法代码如下

public class mpsort {
public static void main(String[] args) {
int arrs[]={22,44,66,6,226,223,4,24,1};
System.out.println("排序前:");
for (int i=0;i<arrs.length;i++){
System.out.print(arrs[i]+" ");
}
sort(arrs);
System.out.println();
System.out.println("排序后:");
for (int i=0;i<arrs.length;i++){
System.out.print(arrs[i]+" ");
}
}
public static void sort(int[] arr){
int length=arr.length;
for (int i=0;i<length-1;i++){
for (int j=0;j<length-i-1;j++){
if(arr[j]>arr[j+1]){
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}
}

运行结果为:

 

 

接下来给大家介绍了另外一种排序,只图一乐就可以了,这个算法叫做睡眠排序。什么是睡眠排序呢。大致思路就是说,有多少被比较的数字我们就开

多少的个线程,直接多线程同步运行打印,数字的值就是我们要休眠的时间。这个休眠的时间的单位是毫秒。小的数字休眠的时间短,就能更快的打印出来,这样

我们就实现了一个从小到大的排序。具体代码如下:

public class sleepSort
{
public static void main(String[] args) {
int[] arrs=new int[]{334,33,4,223,467,35,3,22,1};
for (int arr : arrs) {
new Thread(()->{
try {
Thread.sleep(arr);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.print(arr+" ");
}).start();
}
}
}
运行结果:

 

 这种算法有利有弊吧,优点是代码结构简单,效率较高,缺点是空间资源开销大,当被比较的数字多了,线程开多了就不适用了,而且数字不能太大,超过1000就需要等待1s了

而且两个数字相差不大容易出错,总的来说,空间换时间罢了,弊大于利,只图一乐。

posted on 2022-08-11 15:04  smile908  阅读(25)  评论(0编辑  收藏  举报