整理一些经典算法

数组去重

对这样一个数组[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…

原创文章 5 获赞 12 访问量 618

猜你喜欢

转载自blog.csdn.net/weixin_44883515/article/details/105066601