zoukankan      html  css  js  c++  java
  • JAVA实现各种排序算法----更新中----

    以下纯属练手,先不考虑优化,接近原版思想


    快速排序:

    也是用到最多的排序方法,这里写的是我的启蒙思想啊哈算法里面的样式,每个元素递归执行log(n)次,n个元素,时间复杂度为nlog(n)

    import java.util.Scanner;
    class quickSort {
        static int[] a = {8,6,4,5,1,7,3,2};
        static void quickSort(int left,int right) {
            int i,j,t,tmp;
    
            if(left>right)
            return;
            tmp = a[left];
            i = left;
            j = right;
            while(i!=j) {
                while(a[j] >= tmp && i<j) {
                    j--;
                }
                while(a[i] <= tmp && i<j) {
                    i++;
                }
                if(i<j){
                    a[i] ^= a[j];
                    a[j] ^= a[i];
                    a[i] ^= a[j];
                }
            }
            a[left] = a[i];
            a[i] = tmp;
            quickSort(left,i-1);
            quickSort(i+1,right);
        return ;//整个排序的结束
        }
        public static void main(String[] args) {
    
         
            //int n;
            // Scanner sc = new Scanner(System.in);
            // int n = sc.nextInt();
            // for(int i = 1; i <= n; i++) {
            //     a[i] = sc.nextInt();
            // }
            quickSort(0,7);
            System.out.println(java.util.Arrays.toString(a));
    
        }
    }

    插入排序:

    其实就是两个集合思想,左边排序的好的,右边没有排序好的,不断从右边并入左边排序好的,i是当前位置,j=i-1是超前搜索一位

    比如 a[0],a[1],a[2],a[3],a[4]

             1      3     5    9     2

    此时找到a[i]

    此时的 1 3 5 9 2就看做一个集合,要排序的集合,从2开始往后遍历,j只是往前搜索一步

    i=4,j=3;因为a[3]=9比2大,2的位置就放9了,然后9的位置放5,直到遇到j=0,此时的1是比2小的,所以当前pos1的位置就放一开始存好的2.前面的j+1=i(pos)都已排好,然后这个pos1的位置之前的也在前面的插入排序排好,所以这步的排序就排好了。

    class InsertSort {
        public static void main(String[] args) {
            int[] a = {8,6,7,4,5,3,2,1};
            int i,j;
            for(i = 1; i < 8; i++) {
                if(a[i] < a[i-1]) {//比较左边排好的序列,只要比最大的小,即要完成下面的插入操作。这一步tao哥其实已经说到,其实就算没有这步,在下面a[j]>tmp会判断,a[j]就等于a[i-1],tmp就等于a[i]
                    int tmp = a[i];
                    for(j = i-1; j>=0&&a[j] > tmp; j--)
                        a[j+1] = a[j];
                    
                        a[j+1] = tmp;//当前是a[j]<tmp,比较结束,把tmp插入赋给当前
                }
            }
            System.out.println(java.util.Arrays.toString(a));
    
        }
    }
    

    选择排序,每次找到最小的,依次插到i:0-n位置

    class selectSort {
     public static void main(String[] args) {
            int j,min,i,index;
            int[]a = {8,7,6,5,4,3,2,1};
            for(i = 0; i < a.length; i++) {
                min = a[i];
                index = i;//初始化,其实也为什么意思
                for( j = i+1; j < a.length; j++) {
                    if(min >= a[j]) {
                        min = a[j];
                        index = j;
                    }
                }
                a[index] = a[i];
                a[i] = min;//每次找好的序列
                System.out.println(min);
                System.out.println(java.util.Arrays.toString(a));
    
              }
          }
       }
    }
    


    交换排序:

    import java.util.Arrays;
    
    import javax.xml.transform.Templates;
    
    /**
     * 交换排序算法实现
     *   第一个数与后面的数一一比较,如果后面的数比第一个数小,则交换,
     *   交换完第一个元素继续与后面的数一一比较,一轮之后第一个数最小。
     * @author htt
     *
     */
    public class SwapSort {
        public int[] jhuang(int[] are){
        int tmp = 0;
        for(int j = 0;j < are.length;j++){
            //int min = are[j];
            for(int i = j+1;i < are.length;i++)
            {
                if(are[j] > are[i]){
                  tmp = are[j];
                  are[j] = are[i];
                  are[i] = tmp;
                }
            }
        }
        return are;
        }
        
        public static void main(String[] args) {
            int[] n = new int[]{28,15,19,33,12};
            SwapSort swapSort = new SwapSort();
            int[] result = swapSort.jhuang(n);
            System.out.println(Arrays.toString(result));
        }
    
    }
    




  • 相关阅读:
    MongoDB笔记
    mysql笔记
    08-下载中间件
    ubuntu1804安装pycharm2018.3.x
    02-CSS基础
    14-eval 函数
    13-文件
    12-模块和包
    11-异常
    有关dir和 unittest
  • 原文地址:https://www.cnblogs.com/zhangmingzhao/p/7256701.html
Copyright © 2011-2022 走看看