为什么我的插入排序性能比冒泡排序差的多

我是当事人 2019-05-09 10:30:17
如题
以下是我的代码
package selectsort;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Random;

public class Test {
public static void main(String[] args) throws IOException {
Random r = new Random();
int[] arr = new int[1000000];
for(int i = 0;i<arr.length;i++) {
arr[i] = r.nextInt(1000000);
}
long beginTime = System.currentTimeMillis();
int[] ret = selectSort(arr);
long endTime = System.currentTimeMillis();
System.out.println("运算次数:"+arr.length);
System.out.println("selectSort:"+(beginTime-endTime));
long beginTime1 = System.currentTimeMillis();
int[] ret1 = ballSort(arr);
long endTime1 = System.currentTimeMillis();
System.out.println("ballSort:"+(beginTime1-endTime1));
BufferedWriter bw = new BufferedWriter(new FileWriter("Test.txt"));
bw.write("selectSort:\t");
for(int j =0;j<ret.length;j++) {
String s = ""+ret[j];
bw.write(s);
bw.write(" ");
}
bw.newLine();
bw.write("ballSort:\t");
for(int j =0;j<ret.length;j++) {
String s = ""+ret1[j];
bw.write(s);
bw.write(" ");
}
bw.close();
}
public static int[] selectSort(int[] ins) {
for(int i = 1;i<ins.length;i++) {
if(ins[i]<ins[0]) {
int t = ins[i];
for(int k =i-1;k>=0;k--) {
ins[k+1] = ins[k];

}
ins[0] = t;
continue;
}
for(int j = i-1;j>=0;j--) {
/*
if(j==0&&ins[i]<ins[0]) {
int t = ins[i];
for(int k =i-1;k>=0;k--) {
ins[k+1] = ins[k];
ins[0] = t;
}
break;
}
*/
if(ins[i]>=ins[j]) {
int temp = ins[i];
for(int k =i-1;k>j;k--) {
ins[k+1] = ins[k];
}
ins[j+1] = temp;
break;
}
}
}
return ins;
}
public static int[] ballSort(int[] ins) {
for(int i = 0;i<ins.length-1;i++) {
for(int j = i+1;j<ins.length;j++) {
if(ins[i]>ins[j]) {
int temp = ins[i];
ins[i] = ins[j];
ins[j] = temp;
}
}
}
return ins;
}
}

我对100万个数据进行排序,结果插入排序差了好多
以下是运行结果
运算次数:1000000
selectSort:-437233
ballSort:-145361

...全文
74 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
honbo 2019-05-10
  • 打赏
  • 举报
回复
选择排序每次插入数据时,后面的数据要大量的搬运,费了不少时间。改成链表,应该会快很多。
weixin_41183942 2019-05-10
  • 打赏
  • 举报
回复
循环套的多,性能就差,冒泡 的 2层循环式(ins.length-1) *(ins.length-1) selectSort 你进行了3层循环,从数量上来说 少量10条左右看不出什么,当数据到10000的时候 就是 10000*10000 与 10000*10000*10000数据的差距

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧