<< 如何指定mysql的字符集 | 首页 | 我的Java应用程序为什么崩溃了? >>

Java实现的一些排序算法

排序是一个很重要很基础的算法,排序经常是性能的瓶颈,耗费数据库大量的CPU和内存。排序也经常放在应用程序里,了解排序真的很重要。
/**
 *Java实现的排序法
 *@authorzhangzhihong
 *
 */
public class Sort {
    public Sort(){
    }
    /**
     *冒泡排序法
     *@paramarrs
     */
    public void sort(int[] arrs){
       int temp;
       for(int i=0;i<arrs.length;i++){//每循环一次,当前的i元素位置就是之后元素中最大的元素
           for(int j=i+1;j<arrs.length;j++){//i位置的元素值与之后每个元素进行大小比较,每次循环只要有比i元素大的元素,就与那个元素交换位置
              if(arrs[i]<arrs[j]){//默认地是由大到小排,由小到大只要将"<"改为">";下面将与大的交换位置
                  temp=arrs[i];
                  arrs[i]=arrs[j];
                  arrs[j]=temp;
              }
           }
      
       }
    }
    /**
     *选择排序法,为冒泡排序的改进,外层的循环一次之后才交换元素位置
     *选择排序法据说是最快的
     *@paramarrs
     */
    public void selectSort(int[] arrs){
       int temp;
       for(int i=0;i<arrs.length;i++){//每循环一次,当前的i元素位置就是之后元素中最大的元素
           int lowIndex = i;
           for(int j=i+1;j<arrs.length;j++){//i位置的元素值与之后每个元素进行大小比较,每次循环只要有比i元素大的元素,就记住那个元素交换位置
              if(arrs[lowIndex]<arrs[j]){//默认地是由大到小排,由小到大只要将"<"改为">";下面记住大元素的位置
                  lowIndex=j;
              }
           }
           temp=arrs[i];
           arrs[i]=arrs[lowIndex];
           arrs[lowIndex]=temp;
      
       }
    }
   
    /**
     *插入排序法
     *@paramdata
     */
    public void insertSort(int[] data) {
          int temp;
          for(int i=1; i<data.length; i++){
             for(int j=i; (j>0)&&(data[j]>data[j-1]); j--){
                temp=data[j];
                data[j]=data[j-1];
                data[j-1]=temp;
             }
          }
    }  
    /**
     *Shell排序法,为插入法的改进
     *@paramdata
     */
    public void shellSort(int[] data) {
          for(int i=data.length/2; i>2; i/=2){
             for(int j=0; j<i; j++){
                insertSort(data,j,i);
             }
          }
          insertSort(data,0,1);
       }
 
       private void insertSort(int[] data, int start, int inc) {
          int temp;
          for(int i=start+inc; i<data.length; i+=inc){
             for(int j=i; (j>=inc)&&(data[j]<data[j-inc]); j-=inc){
                temp=data[j];
                data[j]=data[j-inc];
                data[j-inc]=temp;
             }
          }
       }  
    public static void main(String[] args){
       int[] a={5,4,3,2,8,9,8,9,7,4,3,2,4};
       Sort s=new Sort();
//     s.sort(a);
//     s.insertSort(a);
       s.selectSort(a);
       for(int i=0;i<a.length;i++){
           System.out.println(a[i]);
       }
    }
}
标签 :



发表评论 发送引用通报