排序算法总结

参考:https://www.cnblogs.com/onepixel/articles/7674659.html
 

import java.util.Scanner;
//各种排序方法

public class SortM {

    /**
     * @param args
     */
    public static void Swap(int arr[],int i,int j)
    {
        int temp = arr[j];
        arr[j]=arr[i];
        arr[i]=temp;
    }
    public static void output(int arr[])
    {
        for(int i=0;i<arr.length;i++)
        {
            System.out.print(arr[i]);
        }
    }
    //冒泡排序
    public static void bubbleSort(int arr[]){
        for(int i=0;i<arr.length-1;i++)
        {
            for(int j=0;j<arr.length-i-1;j++)
            {
                if(arr[j]>arr[j+1]) 
                {
                    Swap(arr,j,j+1);
                }
            }
        }
        for(int i=0;i<arr.length;i++)
        {
            System.out.print(arr[i]);
        }
    }
    //选择排序 :首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。 
    public static void selectionSort(int arr[])
    {
        
        for(int i=0;i<arr.length-1;i++)
        {
            int min=i;
            for(int j=i+1;j<arr.length;j++)
            {
                if(arr[j]<arr[min])
                {
                    min = j;
                }
                    
            }
            Swap(arr,min,i);     
        }
        output(arr);
        
    }
        //插入排序:取出一个元素,在已经排序的元素序列中从后向前扫描;
  public static void insertionSort(int arr[])
  {
      int current,pre;
      for(int i=1;i<arr.length;i++)
      {
          current = arr[i];
          pre = i-1;
          while(pre>=0&&arr[pre]>current)
          {
              arr[pre+1] = arr[pre];
              pre--;
          }
          arr[pre+1] = current;
      }
      output(arr);
  }
   /*快速排序:
    1)从数列中挑出一个元素,称为 “基准”(pivot);
    2)重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;
    3)递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

        quickSort(arr,0,n-1);
        output(arr);
    */
  public static void quickSort(int arr[],int left,int right)
  {
      if(left<right)
      {
          int index = port(arr,left,right);
          quickSort(arr,left,index-1);
          quickSort(arr,index+1,right);
      }
      
  }
  public static int port(int arr[],int left,int right)
  {
      int pivot = left;
      int index = pivot+1;
      for(int i=index;i<=right;i++)
      {
          if(arr[i]<arr[pivot])
          {
              Swap(arr,i,index);
              index++;
          }
      }
      Swap(arr,index-1,pivot);
      return index-1;
  }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值