`

冒泡算法的小变种

阅读更多
冒泡算法大家都见得多啦,笔试也经常出,但更多的题目可能会加多一些限制条件。下面举2个例子,这方面做得少的朋友可以以此打开一下思维,其实原理都是一样的。如果有其他的例子或者更好的做法,希望可以提出来,和大家一起分享下:)

题目1:从小到大排列下面一堆数字,3,1,6,2,9,0,2,3,9,3,9 ..并且打印他们重复的次数(先不要急着看答案,自己想一下,能想出更好的做法^_^)


参考代码如下:

import java.util.*;

public class Test2 {
      public static void main(String[] args) {
		int[] values = {3,1,6,2,9,0,2,3,9,3,9};
		sort(values);

	}
      public static void sort(int[] vaa){
    	  
    	  //用于交换
    	  int temp;
    	  //Map是用于存放每个数与他的出现次数(数为key,出现次数是value)
    	  Map<Integer,Integer> m = new HashMap<Integer,Integer>();

    	  int[] arrays = vaa;
    	  for(int i=0;i<arrays.length;i++){
    		  for(int j=0;j<arrays.length-i-1;j++){
    			  
    			  if(arrays[j]>arrays[j+1]){
    				  temp = arrays[j];
    				  arrays[j] = arrays[j+1];
    				  arrays[j+1] = temp;
    			  }    			 
    		  }
    	  }
    	  
    	  for(int i=0;i<arrays.length;i++){
    		  System.out.print(arrays[i]+",");
    	  }
    	  
    	  //计算每个数的重复次数
    	  for(int i = 0;i<arrays.length;i++){
    		  if(!m.containsKey(arrays[i])){
    			  m.put(arrays[i], 1);
    		  }
    		  else{
    			  int a = (Integer)m.get(arrays[i]);
    			  a=a+1;
    			  m.remove(arrays[i]);
    			  m.put(arrays[i], a);
    		  }
    	  }
    	  System.out.println("长度:"+arrays.length);
    	  
    	  //加到Set里面过滤一下重复数字,TreeSet是为了打印出来按顺序好看点
    	  Set<Integer> set = new TreeSet<Integer>();
    	  for(int i=0;i<arrays.length;i++){
    		  set.add(arrays[i]);
    	  }

    	  for(int i:set){
    		  System.out.println(i+",重复次数是:"+(m.get(i)-1));
    	  }
      }    
}




小结:我的做法用Map来记录每个数的重复次数,不一定是最好和最快的。




题目二:从大到小排列下面这些数("5-1-9","5-2-5","5-2-4","5-3-1", "8-1-5"),要求当第一个数相等的时候比较第2个,当第二个相等的时候比较第3个


参考代码如下:

public class StringSort1 {
	public static void main(String[] args) {
		String[] str = {  "5-1-9","5-2-5","5-2-4","5-3-1", "8-1-5" };
		sort(str);
		System.out.println("最后结果为:");
		for(int i=0;i<str.length;i++){
			System.out.println(str[i]);
		}
	}

	public static String[] sort(String[] str) {
		int count=0;
		//冒泡算法:2个for循环
        for(int i=0;i<str.length;i++){
        	for(int j=0;j<str.length-i-1;j++){       		
        	count++;	
        	
        	//解析相邻两个数并比较大小
        	String[] s = str[j].split("-");        	
        	int[] first = new int[3];
        	first[0] = Integer.parseInt(s[0]);
        	first[1] = Integer.parseInt(s[1]);
        	first[2] = Integer.parseInt(s[2]);
        	
        	String[] s2 = str[j+1].split("-");
        	int[] second = new int[3];
        	second[0] = Integer.parseInt(s2[0]);
        	second[1] = Integer.parseInt(s2[1]);
        	second[2] = Integer.parseInt(s2[2]);
        	
        	//比较3种情况进行交换:
        	String temp;
        	if(first[0]<second[0] || (first[0]==second[0] && first[1]<second[1]) ||
        			( first[0]==second[0] && first[1]==second[1] && first[2]<second[2])){
        		temp = str[j];
        		str[j] = str[j+1];
        		str[j+1] = temp;
        	}     	       	
          }
        }		
        System.out.println("遍历了"+count+"次");
		return str;
	}
}



小结:这题更简单,只需要在排列的时候把他们一个一个拿出来,然后比较的时候按3种情况就OK了
希望大家提出更多更好的例子
分享到:
评论

相关推荐

    冒泡算法的改进算法

    冒泡算法的改进思想: 1.记录从第0下标开始一直递增的最后一个数的下标start,在以后的每趟排序中都是从start下标开始比较,免去了从头到此下标的比较 2.记录从最后一个下标开始一直递减的最后一个下标end,在以后...

    冒泡算法的实现

    C冒泡算法的实现

    CSHARP冒泡算法实例

    参加多次笔试,居然有几次都考到了冒泡算法.现将原代码分享如下.C#的算法,很精典!请大家多多关注,不好可以骂我! 现在面试用到很多的,可以下载看看

    冒泡算法的实例详细代码

    冒泡算法的实例详细代码让你更容易理解算法

    汇编 冒泡算法(字)

    这是一个实现汇编冒泡算法的例子(asm文件),里面注释详细,是实现一组16位的数组的排序的算法

    用C++语言实现冒泡算法

    用C++语言实现冒泡算法,是大家对冒泡算法有一定的了解和学习。 #include "stdio.h" void main() { int array[5],temp; printf("输入五个数字: "); for (int t=0;t;t++) { scanf("%d",&array[t]); } //...

    冒泡算法.vi_LabVIEWAlgorithm_LabVIEW冒泡算法_labview_

    LabVIEW实现冒泡算法求数组最大值

    可视化展示冒泡算法实现效果

    该源码使用Qt可以可视化展示冒泡排序算法实现效果,方便初学者理解冒泡算法,如果你有一些其他的小需求,可以在此基础上修改完善

    冒泡算法讲解

    C语言冒泡算法视频讲解,两个积分买不了上当、买不了受骗……

    C#冒泡算法asp.net

    C#--冒泡算法 C#--冒泡算法C#--冒泡算法 C#--冒泡算法C#--冒泡算法 C#--冒泡算法C#--冒泡算法 C#--冒泡算法C#--冒泡算法 C#--冒泡算法C#--冒泡算法

    冒泡算法和选择算法演示程序

    基于C语言的排序算法演示程序,包含了“冒泡算法”和“选择算法”两个基础的排序算法。学习程序设计,重点是对算法的理解。本程序动态演示了排序过程,详尽体现涉及到的各个细节,力求让初学者更好地理解这两个算法...

    冒泡算法的演示使用C#编写的

    解说冒泡算法的使用方法这个编程使用c#编写的。演示它们是如何惊醒交换的

    冒泡算法实现Java代码

    冒泡排序算法实现,提供相关代码学习代码算法实现,技术原理实现以及更多相关的代码资源:关注码农的博客,代编码和合作vx:lcz950818,备注:合作

    经典java冒泡算法实现

    经典java冒泡算法实现 采用双重for循环,最后实现了将一个数组中最大的数字放在最后

    JAVA冒泡排序算法

    冒泡排序算法详细分析那还等hi实地阿基hihi大UI一及对阿迪年hiue一群

    冒泡排序算法原理讲解

    该 ppt 为课程讲义,讲解冒泡排序算法原理,及用一个简单实例进行具体分析,还有冒泡排序算法原理的总结等。

    关于c++冒泡排序算法

    c++冒泡排序算法,希望对于初级者的学习提供帮助

    c语言写冒泡算法

    刚刚学习给大家交流下希望大家多批评指正!

    C#冒泡算法+经典算法

    c#冒泡算法,加上经典算法,是你学习c#的好帮手,值得信赖。。

    数据结构冒泡排序算法

    数据结构冒泡排序算法 数据结构冒泡排序算法

Global site tag (gtag.js) - Google Analytics