两种相同的代码跑了四次冒泡排序,结果循环的次数完全不同,是否循环次少的那种代码效率高?
- class arrbianli {
- public static void main(String[] args) {
- int[] arr = {100,13,14,3,2,3,5,3,45,6,67,54,6,7,87,4,54,4,34,6,64,1};
- //System.out.println(toArr(arr));
- //System.out.println("Hello World!");
- //reverse(arr);
- //System.out.println(toArr(arr));
- //System.out.println("=============");
- maopao(arr);
- System.out.println(toArr(arr));
- }
- //冒泡排序,前一个数和后一个数对比,如果前一个数比后一个数大,则交换位置
- public static void maopao(int[] arr)
- {
- int n = 0,t = 0,s = 0,f = 0;
- //1/for中用b了&&
- for (int i = 0; i < arr.length; i++) {
- for (int j = i; j > 0 && arr[j - 1] > arr[j]; j--) {
- tojiaohuan(arr,j, j - 1);
- n++;
- }
- }
- //2for中没有&&,与4相同
- for (int i = 0; i < arr.length; i++) {
- for (int j = i; j > 0; j--) {
- if(arr[j - 1] > arr[j])
- tojiaohuan(arr,j, j - 1);
- t++;
- }
- }
- //3/for中用b了&&,与1相同
- for (int i = 0; i < arr.length; i++) {
- for (int j = i; j > 0 && arr[j - 1] > arr[j]; j--) {
- tojiaohuan(arr,j, j - 1);
- s++;
- }
- }
- //4/for中没有&&,与2相同
- for (int i = 0; i < arr.length; i++) {
- for (int j = i; j > 0; j--) {
- if(arr[j - 1] > arr[j])
- tojiaohuan(arr,j, j - 1);
- f++;
- }
- }
- System.out.println("1循环了 " + n + "次");//
- System.out.println("2循环了 " + t + "次");//
- System.out.println("3循环了 " + s + "次");//
- System.out.println("4循环了 " + f + "次");//
- }
- //反转
- public static void reverse(int[] arr) {
- for (int start = 0,end = arr.length-1;start < end ; start ++ , end --)
- {
- tojiaohuan(arr,start,end);
- }
- }
- //数组字符串返回
- static String toArr(int[] arr) {
- String temp = "[";
- for (int i = 0;i < arr.length ;i++ )
- {
- if (i != arr.length - 1)
- {
- temp = temp + arr[i] + ",";
- }
- else
- {
- temp = temp + arr[i] + "]";
- }
- }
- return temp;
- }
- //交换两个数组空间的值
- public static void tojiaohuan (int[] arr ,int i,int j)
- {
- int temp = arr[i];//定义临时变量,放入参数i的值
- arr[i] = arr[j];//把参数j的值赋给i
- arr[j] = temp;//把临时变量的值赋给j
- }
- public static void printa(int i)
- {
- System.out.println(i);
- }
- }
复制代码
|