zoukankan      html  css  js  c++  java
  • 使用Java语言实现几种常见的排序算法

    看官你好,我的初衷是复习数据结构中所学的各种算法,之前都是用C语言写的,这次改成了Java语言,感觉更简单一些。

    为了容易分享,我把它写在一个类里面,都用了静态方法,莫怪!

    算法功能:输入一个任意长度的整形数组,以String的形式输出数组的由小到大的排序结果。

    下面则是全部代码:

      1 public class Sort {
      2 
      3     public static void main(String[] args) {
      4 
      5         int a[]={12,56,95,35,88,102,89,63,154};
      6         String sa=mpSort(a);
      7         System.out.println("数组A的排序结果是:"+sa);
      8 
      9         int b[]={32,55,175,75,82,111,26,159};
     10         String sb=ksSort(b);
     11         System.out.println("数组B的排序结果是:"+sb);
     12 
     13         int c[]={137,555,186,45,92,150,48,360};
     14         String sc=crSort(c);
     15         System.out.println("数组C的排序结果是:"+sc);
     16     }
     17 
     18     //不排序
     19     public static String noSort(int arr[])
     20     {
     21         String s=" ";
     22         for(int i=0;i<arr.length;i++)
     23         {
     24             s=s+arr[i]+" ";
     25         }
     26         return s;
     27     }
     28 
     29     //冒泡排序
     30     public static String mpSort(int arr[])
     31     {
     32         String s=" ";
     33         int temp;  //temp 为交换时的暂存数据
     34         boolean move;  //move 判断是否有过交换
     35         for(int i=1;i<arr.length;i++)  // i 表示趟数,共arr.length-1趟
     36         {
     37             move=false;
     38             for(int j=arr.length-1;j>=i;j--)
     39             {
     40                 if(arr[j]<arr[j-1])
     41                 {
     42                     temp=arr[j];
     43                     arr[j]=arr[j-1];
     44                     arr[j-1]=temp;
     45                     move=true;
     46                 }
     47             }
     48             if(!move) break;
     49         }
     50         for(int i=0;i<arr.length;i++)
     51         {
     52             s=s+arr[i]+" ";
     53         }
     54         return s;
     55     }
     56 
     57     //快速排序
     58     public static String ksSort(int arr[])
     59     {
     60         String s=" ";
     61         quicksort(arr,0,arr.length-1);  //初始以arr[0]为最低位,arr[arr.length-1]为最高位
     62         for(int i=0;i<arr.length;i++)
     63         {
     64             s=s+arr[i]+" ";
     65         }
     66         return s;
     67     }
     68     //快速排序的分区算法,返回基准数据的下标
     69     private static int partition(int arr[],int low,int high)
     70     {
     71         int key=arr[low];  //基准值赋给岗哨
     72         while(low<high)
     73         {
     74             if(low<high && arr[high]>=key)
     75                 high--;
     76             arr[low]=arr[high];
     77             if(low<high && arr[low]<=key)
     78                 low++;
     79             arr[high]=arr[low];
     80         }
     81         arr[low]=key;  //空位填上基准值
     82         return low;
     83     }
     84     //真正的快速排序:一种递归算法
     85     private static void quicksort(int arr[],int low,int high)
     86     {
     87         if(low<high)
     88         {
     89             int result=partition(arr,low,high);
     90             quicksort(arr,low,result-1);
     91             quicksort(arr,result+1,high);
     92         }
     93     }
     94 
     95     //插入排序
     96     public static String crSort(int arr[])
     97     {
     98         String s=" ";
     99         int key;  //key 表示岗哨,记录新增的数据
    100         for(int i=2;i<=arr.length;i++)  // i 表示有序区长度,从2开始递增,直到arr.length结束
    101         {
    102             if(arr[i-1]<arr[i-2])  //新增数据小于上一轮有序区最后一位
    103             {
    104                 key=arr[i-1];
    105                 for(int j=i-2;j>=0;j--)
    106                 {
    107                     if(j>0)
    108                     {
    109                         if(arr[j]>key)
    110                         {
    111                             arr[j+1]=arr[j];  //大于新增数据,则后移一位
    112                         }
    113                         else
    114                         {
    115                             arr[j+1]=key;  //小于等于新增数据,则空位填上新增数据
    116                             break;
    117                         }
    118                     }
    119                     else  //如果新增数据一直比较到arr[0],需要特殊处理
    120                     {
    121                         if(arr[0]>key)
    122                         {
    123                             arr[1]=arr[0];
    124                             arr[0]=key;
    125                         }
    126                         else
    127                             arr[1]=key;
    128                     }
    129                 }
    130             }
    131         }
    132         for(int i=0;i<arr.length;i++)
    133         {
    134             s=s+arr[i]+" ";
    135         }
    136         return s;
    137     }
    138 }

    运行的结果:
    数组A的排序结果是: 12 35 56 63 88 89 95 102 154
    数组B的排序结果是: 26 32 55 75 82 111 159 175
    数组C的排序结果是: 45 48 92 137 150 186 360 555
    成功生成(总时间:0 秒)

  • 相关阅读:
    zookeeper端口号冲突:8080冲突
    Linux 开机报 or type Control-D to continue
    linux分区和系统文件和挂载
    linux添加JAVA环境变量
    root用户安装的软件在普通用户不生效
    微信小程序:text元素中加入空格
    Java Swing:JPanel添加边框
    Java Swing:JPanel中添加JPanel
    Spring Boot:项目打包成war并发布到Tomcat上运行
    IDEA将MAVEN项目打包成war包
  • 原文地址:https://www.cnblogs.com/yuhenabc/p/2881583.html
Copyright © 2011-2022 走看看