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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘印12 中级黑马   /  2013-3-25 16:22  /  1355 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

排序有很多种方法!我就会选择排序和冒泡排序,但是我看了一些标题说是快速排序比较方便 ,请摸一个大侠给个快速排序的代码!

点评

如果问题未解决,请继续追问回复者,如果问题已经解决,请将分类改为“已解决”,谢谢  发表于 2013-3-26 12:21

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

3 个回复

倒序浏览
本帖最后由 田磊阳 于 2013-3-25 16:36 编辑

快速排序
(1)基本思想:选择一个基准元素,通常选择第一个元素或者最后一个元素,通过一趟扫描,将待排序列分成两部分,一部分比基准元素小,一部分大于等于基准元素,此时基准元素在其排好序后的正确位置,然后再用同样的方法递归地排序划分的两部分。

(2)实例:





(3)用java实现







      public class quickSort {  
    •   int a[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35,25,53,51};  
      public  quickSort(){  
    •     quick(a);  
          for(int i=0;i<a.length;i++)  
    •         System.out.println(a);  
      }  public int getMiddle(int[] list, int low, int high) {     
                  int tmp = list[low];    //数组的第一个作为中轴     
    •             while (low < high) {     
                      while (low < high && list[high] >= tmp) {     

    •       high--;     
    •                 }     
                      list[low] = list[high];   //比中轴小的记录移到低端     
    •                 while (low < high && list[low] <= tmp) {     
                          low++;     
    •                 }     
                      list[high] = list[low];   //比中轴大的记录移到高端     
    •             }     
                 list[low] = tmp;              //中轴记录到尾     
    •             return low;                   //返回中轴的位置     
              }   
    • public void _quickSort(int[] list, int low, int high) {     
                  if (low < high) {     
    •                int middle = getMiddle(list, low, high);  //将list数组进行一分为二     
                      _quickSort(list, low, middle - 1);        //对低字表进行递归排序     
    •                _quickSort(list, middle + 1, high);       //对高字表进行递归排序     
                  }     
    •         }   
      public void quick(int[] a2) {     
    •             if (a2.length > 0) {    //查看数组是否为空     
                      _quickSort(a2, 0, a2.length - 1);     
    •         }     
             }   
    • }

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
归并排序
(1)基本排序:归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。

(2)实例:




    import java.util.Arrays;

  • public class mergingSort {
  • int a[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35,25,53,51};  
    public  mergingSort(){
  •     sort(a,0,a.length-1);  
        for(int i=0;i<a.length;i++)
  •         System.out.println(a);  
    } public void sort(int[] data, int left, int right) {  
        // TODO Auto-generated method stub
  •     if(left<right){  
            //找出中间索引
  •         int center=(left+right)/2;  
            //对左边数组进行递归
  •         sort(data,left,center);  
            //对右边数组进行递归
  •         sort(data,center+1,right);  
            //合并
  •         merge(data,left,center,right);
  •     }  
    }
  • public void merge(int[] data, int left, int center, int right) {  
        // TODO Auto-generated method stub
  •     int [] tmpArr=new int[data.length];  
        int mid=center+1;
  •     //third记录中间数组的索引  
        int third=left;
  •     int tmp=left;  
        while(left<=center&&mid<=right){

  •    //从两个数组中取出最小的放入中间数组
  •         if(data[left]<=data[mid]){  
                tmpArr[third++]=data[left++];
  •         }else{  
                tmpArr[third++]=data[mid++];
  •         }  
        }
  •     //剩余部分依次放入中间数组  
        while(mid<=right){
  •         tmpArr[third++]=data[mid++];  
        }
  •     while(left<=center){  
            tmpArr[third++]=data[left++];
  •     }  
        //将中间数组中的内容复制回原数组
  •     while(tmp<=right){  
            data[tmp]=tmpArr[tmp++];
  •     }  
        System.out.println(Arrays.toString(data));
  • }
  • }

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
在实际开发中用array.sort()方法就可以

但是记得导入包
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马