面试题求解!大神们!

加文哥 2017-07-11 04:27:46
用java实现一个数组的升序排序,同时给出算法的时间复杂度和空间复杂度?求解?

大神们,“”算法的时间“”和“”空间复杂度“”我不明白什么意思?

public void sort(Integer [] arr){
..............
}
...全文
365 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zerozerg2006 2017-07-12
  • 打赏
  • 举报
回复
最万金油的就是快排吧,时间nlogn,空间好像是n,要么就是nlogn 然后就是堆排,时间也是nlogn,空间应该是n 装逼的做法是,维护一个平衡二叉树。 对于有些特殊情况,比如本身有序的数组,就用插入排序,时间的下限是n,并且不需要额外使用空间。 还有桶排,时间是n,但是会破坏本身数据,可以理解为将原数组的元素重组了。 然后一楼的别装逼了,最极限的排序时间复杂度是o(1),只要保证给的数组就是有序的就行了。口可口可
rumlee 2017-07-12
  • 打赏
  • 举报
回复
引用 4 楼 pany1209 的回复:

冒泡1:
public static void bubbleSort(int arr[]) {
	    boolean doSwap;
	    for(int i = 0; i <arr.length - 1; i++) {
	        doSwap = false;
	        for(int j = 0; j < arr.length- i - 1; j++) {
	            if(arr[j + 1] < arr[j]) {
	                swap(arr, j, j + 1);
	                doSwap = true;
	            }
	        }
	        if(doSwap == false)
	            return;
	    }    
	}
时间复杂度:O(n)

冒泡2
public static void bubbleTest(int[] arr){
		for (int i = 0; i < arr.length-1; i++) {
			for (int j = 0; j < arr.length-1-i; j++) {
				if(arr[j]>arr[j+1]){
					int temp=arr[j];
					arr[j]=arr[j+1];
					arr[j+1]=temp;
				}
			}
		}
	}
时间复杂度:O(n^2)
你这个冒泡1所谓的O(n),那指的是最佳情况下,那最糟情况下呢,平均呢? 排序算法,不管哪个算法,都不可能做到O(n)的,在最理想的情况下的时间复杂度并不能作为算法的时间复杂度来考虑。
soton_dolphin 2017-07-12
  • 打赏
  • 举报
回复
从selection sort, insertion sort, merge sort, quick sort 里面选一个
a869291630 2017-07-12
  • 打赏
  • 举报
回复
数据结构中应该有你想要的答案
李德胜1995 2017-07-11
  • 打赏
  • 举报
回复

冒泡1:
public static void bubbleSort(int arr[]) {
	    boolean doSwap;
	    for(int i = 0; i <arr.length - 1; i++) {
	        doSwap = false;
	        for(int j = 0; j < arr.length- i - 1; j++) {
	            if(arr[j + 1] < arr[j]) {
	                swap(arr, j, j + 1);
	                doSwap = true;
	            }
	        }
	        if(doSwap == false)
	            return;
	    }    
	}
时间复杂度:O(n)

冒泡2
public static void bubbleTest(int[] arr){
		for (int i = 0; i < arr.length-1; i++) {
			for (int j = 0; j < arr.length-1-i; j++) {
				if(arr[j]>arr[j+1]){
					int temp=arr[j];
					arr[j]=arr[j+1];
					arr[j+1]=temp;
				}
			}
		}
	}
时间复杂度:O(n^2)
MikeDDT009 2017-07-11
  • 打赏
  • 举报
回复
复杂度表示不懂,但是算法时间倒是知道,直白点就是排序的这个计算过程花了多少时间。比如排个序,一个花了10分钟,一个要花1年,所花费的时间是不一样的,而明显短时间能拿到正确的结果才是王道,而一个花的时间长到爆,比如几十上百年那么也许对这就毫无意义,至少在这排序是这个道理。
  • 打赏
  • 举报
回复
public void bubbleSort(int a[]) {   
  
    int n = a.length;   
  
    for (int i = 0; i < n - 1; i++) {   
  
      for (int j = 0; j < n - 1; j++) {   
  
        if (a[j] > a[j + 1]) {   
  
          int temp = a[j];   
  
          a[j] = a[j + 1];   
  
          a[j + 1] = temp;   
  
        }   
  
      }   
  
    }   
  
}   
qq_24597963 2017-07-11
  • 打赏
  • 举报
回复
你百度下咯 不过如果是计算机方面专业不可能不

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧