黑马程序员:数组排序方法的总结

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ---------------------- 

JAVA中在运用数组进行排序功能时,一般有四种方法:快速排序法、冒泡法、选择排序法、插入排序法

快速排序法主要是运用了Arrays中的一个方法Arrays.sort()实现。

【1】快速排序法

该排序算法是一个经过调优的快速排序法,此算法在许多数据集上提供 n*log(n) 性能,这导致其他快速排序会降低二次型性能。public static void sort(int[] a, int fromIndex, int toIndex)对指定 int 型数组的指定范围按数字升序进行排序。排序的范围从索引 fromIndex(包括)一直到索引 toIndex(不包括)。

 

import java.util.Arrays; 
 public class Test2
{   
        public static void main(String[] args)
{             int[] a={5,4,2,4,9,1};                   
Arrays.sort(a);  //进行排序                  
 for(int i: a)
{                      
     System.out.print(i);                  
}  
      } 
           } 


 

【2】冒泡法

冒泡排序:它的时间复杂度为O(n^2),虽然不及堆排序、快速排序的O(nlogn,底数为2),但是有两个优点:1.“编程复杂度”很低,很容易写出代码;2.具有稳定性,这里的稳定性是指原序列中相同元素的相对顺序仍然保持到排序后的序列,而堆排序、快速排序均不具有稳定性。不过,一路、二路归并排序、不平衡二叉树排序的速度均比冒泡排序快,且具有稳定性,但速度不及堆排序、快速排序。

 

public static int[] bubbleSort(int[] args)//冒泡排序算法 
{         
     for(int i=0;i<args.length-1;i++){              
          for(int j=i+1;j<args.length;j++){            
          if (args[i]>args[j]){     
                     int temp=args[i];      
                    args[i]=args[j];  
                        args[j]=temp; 
                         }      
             } 
        }   
      return args; 
 } 


【3】选择排序法

在简单选择排序过程中,所需移动记录的次数比较少。最好情况下,即待排序记录初始状态就已经是正序排列了,则不需要移动记录。最坏情况下,即待排序记录初始状态是按逆序排列的,则需要移动记录的次数最多为3(n-1)。简单选择过程中需要进行的比较次数与初始状态下待排序的记录序列的排列情况无关。当i=1时,需进行n-1次比较;当i=2时,需进行n-2次比较;依次类推,共需要进行的比较次数是∑ =(n-1)+(n-2)+…+2+1=n(n-1)/2,即进行比较操作的时间复杂度为O(n2)。这种方法其实是对冒泡排序的深入。

public static int[] selectSort(int[] args){//选择排序算法        
    for (int i=0;i<args.length-1 ;i++ ){     
              int min=i;     
              for (int j=i+1;j<args.length ;j++ )
{          
               if (args[min]>args[j])
{     
                         min=j;            
                  }       
              }          
               if (min!=i)
{          
              int temp=args[i];            
            args[i]=args[min];            
            args[min]=temp;                 
           }       
       }      
         return args;    
  } 


 

【4】插入排序法

包括:直接插入排序,二分插入排序(又称折半插入排序),链表插入排序,希尔排序(又称缩小增量排序)。

public static int[] insertSort(int[] args){//插入排序算法    
                for(int i=1;i<args.length;i++)
{      
                      for(int j=i;j>0;j--){                 
                   if (args[j]<args[j-1]){         
                                   int temp=args[j-1];            
                               args[j-1]=args[j];      
                                    args[j]=temp;        
                                  }
else break;       
                    }       
            }     
              return args;    
       }  


在毕向东老师的视频里主要强调了,快速排序法与冒泡排序法这两种方法,因此需要深刻的理解与掌握。

 

学习心得:要理解快速排序法与冒泡排序法各自的工作原理,各自有什么优缺点。

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值