黑马程序员技术交流社区

标题: 请教代码效率问题 [打印本页]

作者: 肖银    时间: 2013-12-29 00:47
标题: 请教代码效率问题
两种相同的代码跑了四次冒泡排序,结果循环的次数完全不同,是否循环次少的那种代码效率高?



  1. class arrbianli {

  2.         public static void main(String[] args) {
  3.                 int[] arr = {100,13,14,3,2,3,5,3,45,6,67,54,6,7,87,4,54,4,34,6,64,1};
  4.                 //System.out.println(toArr(arr));
  5.                 //System.out.println("Hello World!");
  6.                 //reverse(arr);
  7.                 //System.out.println(toArr(arr));
  8.                 //System.out.println("=============");
  9.                 maopao(arr);
  10.                 System.out.println(toArr(arr));
  11.         }

  12. //冒泡排序,前一个数和后一个数对比,如果前一个数比后一个数大,则交换位置

  13.         public static void maopao(int[] arr)
  14.         {

  15.                 int n = 0,t = 0,s = 0,f = 0;
  16.                 //1/for中用b了&&
  17.                 for (int i = 0; i < arr.length; i++) {
  18.                         for (int j = i; j > 0 && arr[j - 1] > arr[j]; j--) {
  19.                                 tojiaohuan(arr,j, j - 1);
  20.                                 n++;
  21.                         }
  22.                 }
  23.                 //2for中没有&&,与4相同
  24.                 for (int i = 0; i < arr.length; i++) {
  25.                         for (int j = i; j > 0; j--) {
  26.                                 if(arr[j - 1] > arr[j])
  27.                                 tojiaohuan(arr,j, j - 1);
  28.                                 t++;
  29.                         }
  30.                 }
  31.                 //3/for中用b了&&,与1相同
  32.                 for (int i = 0; i < arr.length; i++) {
  33.                         for (int j = i; j > 0 && arr[j - 1] > arr[j]; j--) {
  34.                                 tojiaohuan(arr,j, j - 1);
  35.                                 s++;
  36.                         }
  37.                 }
  38.                 //4/for中没有&&,与2相同
  39.                 for (int i = 0; i < arr.length; i++) {
  40.                         for (int j = i; j > 0; j--) {
  41.                                 if(arr[j - 1] > arr[j])
  42.                                 tojiaohuan(arr,j, j - 1);
  43.                                 f++;
  44.                         }
  45.                 }
  46.                 System.out.println("1循环了 " + n + "次");//
  47.                 System.out.println("2循环了 " + t + "次");//
  48.                 System.out.println("3循环了 " + s + "次");//
  49.                 System.out.println("4循环了 " + f + "次");//


  50.         }
  51.         //反转
  52.         public static void reverse(int[] arr) {
  53.                 for (int start = 0,end = arr.length-1;start < end ; start ++ , end --)
  54.                 {
  55.                         tojiaohuan(arr,start,end);
  56.                 }
  57.         }
  58.         //数组字符串返回
  59.         static String toArr(int[] arr) {
  60.                 String temp = "[";
  61.                 for (int i = 0;i < arr.length ;i++ )
  62.                 {
  63.                         if (i != arr.length - 1)
  64.                         {
  65.                                 temp = temp + arr[i] + ",";
  66.                         }
  67.                         else
  68.                         {
  69.                                 temp = temp + arr[i] + "]";
  70.                         }
  71.                 }
  72.                 return temp;
  73.         }


  74.         //交换两个数组空间的值
  75.         public static void tojiaohuan (int[] arr ,int i,int j)
  76.         {
  77.                 int temp = arr[i];//定义临时变量,放入参数i的值
  78.                 arr[i] = arr[j];//把参数j的值赋给i
  79.                 arr[j] = temp;//把临时变量的值赋给j
  80.         }
  81.         public static void printa(int i)
  82.         {
  83.                 System.out.println(i);
  84.         }
  85. }
复制代码



作者: 高志鹏1    时间: 2013-12-29 15:41
效率  ,是要用  时间复杂度  和  空间复杂度  来度量的吧




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2