数组去重
对这样一个数组[1,2,3,4,1,1,2,3,5]去重,首先想到
for(var i=0;i<arr.length;i++){
for(var j=i+1;j<arr.length;j++){
if(arr[i]==arr[j]){
arr.splice(j,1);
}
}
}
我们看结果
并没有成功去重,原因在于有两个连续的1,删掉第一个后第二个顶替了原来的位置,所以正确地算法应该是
for(var i=0;i<arr.length;i++){
for(var j=i+1;j<arr.length;j++){
if(arr[i]==arr[j]){
arr.splice(j,1);
j--;
}
}
}
冒泡排序
简单版,每一趟都挨着挨着比较
//简单版
static void bubbleSorting01(int[] arr) {
int temp = 0;
for(int i = 0;i<arr.length-1;i++) {
System.out.print("第"+(i+1)+"趟排序....................");
for(int k = 0;k<arr.length-1;k++) {
if(arr[k]>arr[k+1]) {
temp = arr[k];
arr[k] = arr[k+1];
arr[k+1] = temp;
}
}
System.out.println(Arrays.toString(arr));
}
}
初级版, 每一趟去除上一趟已经比较过的元素
//初级版,减少比较次数
static void bubbleSorting02(int[] arr) {
int temp = 0;
for(int i = 0;i<arr.length-1;i++) {
System.out.print("第"+(i+1)+"趟排序....................");
for(int k = 0;k<arr.length-1-i;k++) {
if(arr[k]>arr[k+1]) {
temp = arr[k];
arr[k] = arr[k+1];
arr[k+1] = temp;
}
}
System.out.println(Arrays.toString(arr));
}
}
在初级版的基础上减少不必要的比较
//最终版
static void bubbleSorting03(int[] arr) {
int temp = 0;
boolean sorted;
for(int i = 0;i<arr.length-1;i++) {
System.out.print("第"+(i+1)+"趟排序....................");
sorted = true;
for(int k = 0;k<arr.length-1-i;k++) {
if(arr[k]>arr[k+1]) {
sorted = false;
temp = arr[k];
arr[k] = arr[k+1];
arr[k+1] = temp;
}
}
System.out.println(Arrays.toString(arr));
if(sorted == true) break;
}
}
}
loading…