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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 徐梦侠 中级黑马   /  2012-10-12 00:04  /  1378 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

写日志的时候总结了Java的一些排序方法,不过感觉不多,只找到的有选择排序、冒泡排序、快速排序、插入排序、希尔排序。欢迎大家补充。
1、选择排序
头角标与后面每个元素比较,如果符合条件换位。
public static void selectSort(int[] arr){
   for(int x=0;x<arr.length-1;x++){
      for(int y=x+1;y<arr.length;y++){
         if(arr[x]>arr[y]){
            int tmp=arr[x];
              arr[x]=arr[y];
              arr[y]=tmp;
          }
      }
   }
}
2、冒泡排序
相邻的两个元素进行比较,如果符合条件换位
public static void bubbleSort(int[] arr){
   for(int x=0;x<arr.length-1;x++){
      for(int y=0;y<arr.length-x-1;y++){ //x的原因是每次y比较次数在减少
         if(arr[y]>arr[y+1]){
            int tmp=arr[y];
              arr[y]=arr[y+1];
              arr[y+1]=tmp;
          }
       }
   }
}
3、快速排序:
先选择一个值(本例选的是中间值),并依次找出左边比中间值大的与右边比中间值小的,并进行对调,每一轮两边同时进行,直到角标交错时停止,并用递归的形式一直调用函数,直到结束。
public void quickSort(String[] strDate,int left,int right){
   String middle,tempDate;
   int i,j;
   i=left;
   j=right;
   middle=strDate[(i+j)/2];
   do{
      while(strDate.compareTo(middle)<0&& i<right)
       i++; //找出左边比中间值大的数
      while(strDate[j].compareTo(middle)>0&& j>left)
      j--; //找出右边比中间值小的数
      if(i<=j){ //将左边大的数和右边小的数进行替换
          tempDate=strDate;
          strDate=strDate[j];
          strDate[j]=tempDate;
          i++;
          j--;
      }
   }while(i<=j); //当两者交错时停止
   if(i<right){
       quickSort(strDate,i,right);
   }
   if(j>left){
       quickSort(strDate,left,j);
   }
}

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马