交换排序-冒泡排序
这个超级简单,我就不BB了直接上代码。A是原始风味的冒泡排序,B是简单优化后的冒泡排序。
public static void main(String[] args) {
/**
* totalMemory()这个方法返回的是java虚拟机现在已经从操作系统那里挖过来的内存大小,也就是java虚拟机这个进程当时所占用的所有 内存。
* 如果在运行java的时候没有添加-Xms参数,那么,在java程序运行的过程的,内存总是慢慢的从操作系统那里挖的,基本上是用多少挖多少,
* 直 挖到maxMemory()为止,所以totalMemory()是慢慢增大的。如果用了-Xms参数,
* 程序在启动的时候就会无条件的从操作系统中挖- Xms后面定义的内存数,然后在这些内存用的差不多的时候,再去挖。
*/
int [] nums = new int[NUMBER];
numberFactory(NUMBER,nums);
Runtime r = Runtime.getRuntime();
r.gc();//垃圾回收
Long startTime = System.currentTimeMillis();//开始时间
Long startMem = r.freeMemory();
bubbleSortA(nums);
Long endTime1 = System.currentTimeMillis();//结束时间
Long endMem1 = r.freeMemory();
System.out.println("冒泡排序用时: "+(endTime1-startTime));
System.out.println("冒泡排序使用内存:"+(endMem1 - startMem));
System.out.println(Arrays.toString(nums));
}
static final int[] bubbleSortA(int [] nums){
for(int i=0,length = nums.length-1;i<length;i++){
for(int j=0;j<length;j++){
if(nums[j]>nums[j+1]){
int temp = nums[j];
nums[j] = nums[i+1];
nums[j+1] = temp;
}
}
}
return nums;
}
static final int[] bubbleSortB(int[] nums){
int number = nums.length-1;
for(int i=0;i<number;i++){
Boolean x = true;
for(int j=0;j<number;j++){
int temp = nums[j];
nums[j] = nums[j+1];
nums[j+1] = temp;
number = j+1;
x = false;
}
if(x){
break;
}
}
return nums;
}
bubbleSortB中的优化很简单,在if中的判断增加了一个数值,最后记录下的数值,就是这一波的冒泡过程中最后一个交换位置的元素,之后没有动的元素说明他们是已经排好序的,这样就避免了重复的比较,布尔值,如果这一次循环下来一次都没有交换元素,说明已经全部都符合要求了,也就不需要再去继续下去了,break跳出循环。
阿西吧,多练练,多看看,中会变成大牛,子曰:学而时习之,不亦说乎。现在用不到,迟早用得到。写他就对了!