两种排序算法随想
冒泡排序,可直接运行,有需要可以直接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了
而且两个数字相差不大容易出错,总的来说,空间换时间罢了,弊大于利,只图一乐。