各类排序算法汇总(java源码)

**主要内容为(快排、插入排序、选择排序、冒泡、希尔排序、堆排序、归并排序),最下方有swap函数和测试代码(自行根据函数名替换排序算法即可)。**
**快排**————————————————————————————

public static void quicksort(int[] arr,int low,int high){

      int tmp;
      if(low>=high)return ;
      int tag=arr[low];
       int left=low;
       int right=high;
       while(left<right){
           while(right>left&&arr[right]>=tag){
               right--;
           }
           while(left<right&&arr[left]<=tag){
               left++;
           }
           if(left<right){
               tmp=arr[left];
               arr[left]=arr[right];
               arr[right]=tmp;
           }

       }
       arr[low]=arr[left];
       arr[left]=tag;
       quicksort(arr,low,right-1);
       quicksort(arr,right+1,high);

   }




     ————————————————————————————————

     **插入排序**——————————————————————————

public static void insertsort(int[] arr){
       int i;
       int j;
       for(i=1;i<arr.length;i++){
          if(arr[i]<arr[i-1]){
               int tmp=arr[i];
               for(j=i-1;j>=0&&arr[j]>tmp;j--){
                   arr[j+1]=arr[j];
               }
               arr[j+1]=tmp;

          }
   }



————————————————————————————————————————

**选择排序**——————————————————————————————————

selectsort
       public static void selectionsort(int[] arr){
           for(int i=0;i<arr.length;i++){
               int min=i;
               for(int j=i+1;j<arr.length;j++){
                   if(arr[j]<arr[min])
                       min=j;
               }
               if(min!=i){
                   int tmp=arr[i];
                   arr[i]=arr[min];
                   arr[min]=tmp;
               }
           }
       }



——————————————————————————————————————————


**冒泡**————————————————————————————————————————

public static void bubblesort(int[] arr){
           for(int i=0;i<arr.length;i++){
               boolean flag=true;
               for(int j=0;j<arr.length-i-1;j++){
                   if(arr[j]>arr[j+1]){
                       swap(arr,j,j+1);
                       flag=false;
                   }
               }
               if(flag)
                   break;
           }
       }



——————————————————————————————————————————


**希尔排序**——————————————————————————————————

//shellsort
       public static void shellsort(int[] arr){
           for(int gap=arr.length/2;gap>=1;gap=gap/2){
               for(int i=gap;i<arr.length;i++){
                   int j=i;
                   //method1  by swap
                  /* while(j>=gap&&arr[j]<arr[j-gap]){
                       swap(arr,j,j-gap);
                       j-=gap;
                   }*/
                   //method2 by move
                   int tmp=arr[i];
                   while(j>=gap&&arr[j-gap]>tmp){
                       arr[j]=arr[j-gap];
                       j-=gap;
                   }
                   arr[j]=tmp;
               }
           }

       }








————————————————————————————————————————



**堆排序**————————————————————————————————————

 //heapsort
       public static void heapsort(int[] arr){
           //1.build tree
           for(int i =arr.length/2-1;i>=0;i--){

               adjust(arr,i,arr.length);
           }
           for(int j=arr.length-1;j>0;j--){
               swap(arr,0,j);
               adjust(arr,0,j);  //因为开始建堆时调整使用的是arr.length ,此时j为减一后的“长度”,所以之后均为j即可。
           }

       }

       public static void adjust(int[] arr,int i,int length){

             int tmp=arr[i];
             for(int j=2*i+1;j<length;j=2*j+1){
                 if(j+1<length&&arr[j]<arr[j+1]){
                     j++;
                 }
                 if(arr[j]>tmp){
                     arr[i]=arr[j];
                     i=j;
                 }
                 else{
                     break;
                 }

             }
             arr[i]=tmp;
       }







————————————————————————————————————————————

**归并排序**————————————————————————————————————

   //mergesort
       public static void mergesort(int[] arr){
           int[] tmp=new int[arr.length];
           sort(arr,0,arr.length-1,tmp);
       }
       public static void sort(int[]arr,int low,int high,int[] tmp){
           if(low>=high)return;
           int middle=(low+high)/2;
           sort(arr,low,middle,tmp);
           sort(arr,middle+1,high,tmp);
           merge(arr,low,middle,high,tmp);
       }
       public static void merge(int[] arr,int low,int middle,int high,int[] tmp){
           int a,b,c;
           a=low;
           b=middle+1;
           c=low;
           while(a<=middle&&b<=high){
               if(arr[a]>arr[b])
               {
                   tmp[c++]=arr[b++];
               }
               else{
                   tmp[c++]=arr[a++];
               }
           }
           while(a<=middle){
               tmp[c++]=arr[a++];
           }
           while(b<=high){
               tmp[c++]=arr[b++];
           }
           while(low<=high){
               arr[low]=tmp[low];
               low++;
           }
       }



————————————————————————————————————————————

交换函数swap
 public static void swap(int[]arr,int a,int b){
           arr[a]=arr[a]+arr[b];
           arr[b]=arr[a]-arr[b];
           arr[a]=arr[a]-arr[b];
       }
测试代码
public static void main(String[] args){
          int[] arr = {10,7,2,4,7,62,3,4,2,1,8,9,19};
           //1 2 2 3 4 4 7 7  8 9 10 19 62
         //  int[] arr = {1,2,3,8,99,54,0,6,8,10,11,15,20};
           mergesort(arr);
           for (int i = 0; i < arr.length; i++) {
               System.out.println(arr[i]);
           }
       }
*本文旨在方便查询浏览,欢迎指正。*
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值