A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

在很多地方看到快速排序什么的,但是不是太懂。这个方法能提高很高的效率吗?排序方法效率都差不多吧?

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

3 个回复

倒序浏览
1) 若n较小(n <= 50),则可以采用直接插入排序或直接选择排序。由于直接插入排序所需的记录移动操作较直接选择排序多,因而当记录本身信息量较大时,用直接选择排序较好。
(2) 若文件的初始状态已按关键字基本有序,则选用直接插入或冒泡排序为宜。
(3) 若n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序。快速排序是目前基于比较的内部排序法中被认为是最好的方法。
(4) 在基于比较排序方法中,每次比较两个关键字的大小之后,仅仅出现两种可能的转移,因此可以用一棵二叉树来描述比较判定过程,由此可以证明:当文件的n个关键字随机分布时,任何借助于"比较"的排序算法,至少需要O(nlog2n)的时间。
(5) 当记录本身信息量较大时,为避免耗费大量时间移动记录,可以用链表作为存储结构。

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
其实冒泡排序啊,选择排序啊都是为了让你了解一些排序的过错和方法,工作开发中几乎不用,因为java中有自己定义的排序方法直接调用就行,比如:数组类型的有 Arrays.sort() ,类集型的有 Collections.sort()被排序的对象必须实现Comparable接口的compareTo方法 ,还有ArrayList  TreeSet   TreeMap 关键看你想怎么排序!

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
冒泡 和选择排序   我觉得 是 考你个人理解和区分能力的
  1. package daydanmonth;
  2. //排序的那些事,选择排序+冒泡排序
  3. import java.util.*;//一个最方便 另加的  java内置功能
  4. public class ArrayText {

  5.         /**
  6.          * 需求:从已有的数组从小到大依次排列
  7.          * 方法:
  8.          * 1:定义两个未知变量,通过for循环进行两个函数之间的两两依次进行对比,相对较大的元素 靠后排列
  9.          * 2; 设置一个具有间隔符功能的函数,从而使输出的排列数组更加美观
  10.          *
  11.          *
  12.          * 输出结果:
  13.          * [1, 2, 3, 4, 2, 1, 2, 3, 4, 5, 6, 7, 3, 2, 2, 2, 21]
  14.            [1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 4, 4, 5, 6, 7, 21]
  15.           
  16.            [1, 2, 3, 4, 2, 1, 2, 3, 4, 5, 6, 7, 3, 2, 2, 2, 21]
  17.            [1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 4, 4, 5, 6, 7, 21]

  18.            */
  19. //数组的排序----选择排序:从数组第一个元素开始,和后面的元素对比,最小的排最前,与此类推
  20.         public static void selectSort(int []arr)
  21.         {
  22.                 for(int x=0;x<arr.length;x++)
  23.                 {
  24.                         for(int y=x+1;y<arr.length;y++)//y代表位置相对靠后的元素
  25.                         {
  26.                                 if(arr[x]>arr[y])//如果想从大到小排列的话只需把>变成<
  27.                                 {
  28.                                         //int temp=arr[x];//定义一个中间值以便两变量互换位置
  29.                                         //  arr[x]=arr[y];
  30.                                           //arr[y]=temp;
  31.                                        
  32.                                          swap(arr,y,x);//利用函数功能进行  换位
  33.                                 }
  34.                         }
  35.                 }
  36.         }
  37.         public static void printArry(int[]arr)//为了美观设置一个关于间隔符号的函数
  38.         {
  39.                 System.out.print("[");
  40.                 for(int x=0;x<arr.length;x++)
  41.                 {
  42.                         if(x!=arr.length-1)
  43.                         {
  44.                                 System.out.print(arr[x]+", ");
  45.                                 }
  46.                                 else
  47.                                         System.out.print(arr[x]+"]");
  48.                         }
  49.                 System.out.println();
  50.         }
  51.         //冒泡排序法:选择排序:从数组前面开始,有顺序两两对比,最小的排最前,与此类推
  52.                 public static void bubbleSort(int []arr)
  53.                 {
  54.                         for(int x=0;x<arr.length-1;x++)
  55.                         {
  56.                                 for(int y=0;y<arr.length-x-1;y++)
  57.                                 {
  58.                                         if(arr[y]>arr[y+1])//如果想从大到小排列的话只需把>变成<
  59.                                         {
  60.                                                 //int temp=arr[y];//定义一个中间值以便两变量互换位置
  61.                                                  // arr[y]=arr[y+1];
  62.                                                  // arr[y+1]=temp;
  63.                                                   
  64.                                                   
  65.                                                   swap(arr,y,y+1);//利用函数功能进行换位
  66.                                 }
  67.                         }
  68.                 }
  69.         }
  70.                
  71.                 //换位置函数功能
  72.                 public static void swap(int[]arr,int a,int b)
  73.                 {
  74.                         int temd=arr[a];
  75.                         arr[a]=arr[b];
  76.                         arr[b]=temd;
  77.                 }
  78. public static void main(String[] args)
  79. {
  80.                 int arr[]={15,2,3,4,2,1,2,3,4,5,6,7,3,2,2,2,21};
  81.                
  82.                 System.out.print("排列前:         ");
  83.                 printArry(arr);//排列前
  84.                
  85.                 System.out.print("选择排序法:");
  86.                 selectSort(arr);//进行排列
  87.                 printArry(arr);//排列后
  88.                
  89.                 System.out.print("冒泡排序法:");
  90.                 bubbleSort(arr);
  91.                 printArry(arr);//排列后
  92.                
  93.                 System.out.print("Arrays.sort--Java内置排序:");
  94.                 System.out.println();
  95.                 Arrays.sort(arr);
  96.                 printArry(arr);
  97.                
  98.                
  99.                
  100.                 }
  101.         }
  102.          

  103.        
复制代码


但是在日常开发中  一般用 ArrayList  TreeSet   TreeMap 之类的,,毕竟人家都已经封装好了   你直接拿出来用就行了   这也是面向对象的精华所在  哈

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马