码迷,mamicode.com
首页 > 编程语言 > 详细

八大内部排序

时间:2019-10-10 19:51:26      阅读:102      评论:0      收藏:0      [点我收藏+]

标签:swap   ++   err   位置   info   png   sort   div   java   

先来看看8种排序之间的关系:

 技术图片

一、直接插入排序

代码如下

 1 public void inerrtSort(int[] a) {
 2         int len = a.length;
 3         for (int i = 1; i < len; i++) {
 4             int tem = a[i];
 5             int j;
 6             for ( j = i - 1; j >= 0 && tem < a[j]; j--) {
 7                 // tem < a[j]只能在for里面判断 否则就算找tem >= a[j]也会一直到j=0,错误移动元素
 8                 a[j+1 ] = a[j];//向后移动
 9             }
10             a[j+1] =tem;
11         }
12     }
//看起来简单 实则有太多细节

 

二、希尔排序

 public  void shellSort(int[] list) {
        int len = list.length ;
        // 取增量
        int gap = len / 2;

        while (gap >= 1) {
            // 无序序列
            for (int i = gap; i < len; i++) {
                int temp = list[i];
                int j;

                // 有序序列
                for (j = i - gap; j >= 0 && list[j] > temp; j = j - gap) {
                    list[j + gap] = list[j];
                }
                list[j + gap] = temp;
            }

            // 缩小增量
            gap = gap / 2;
        }
    }

 

第三、简单选择排序

public void selectSort(int[] a) {
        for (int i = 0; i < a.length ; i++) {
            int min= i;
            for (int j = i+1; j <a.length ; j++) {
               if(a[min] > a[j]) min = j;
            }
            if(min != i){
                int tem = a[min];
                a[min] = a[i];
                a[i] = tem;
            }

        }

    }

  

 

第四、堆排序

 

 

 

 

第五、冒泡排序

public  void bubbleSort(int[] a) {
        int len = a.length-1;

        for (int i = 0; i < len; i++) {
            for (int j = 0; j <len-i ; j++) {
                if (a[j] > a[j+1]){
                    int temp = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = temp;
                }
            }
        }
    }

 

 第六、快排

 public static void quickSort(int[] list, int left, int right) {
        if (left < right) {
            // 分割数组,找到分割点
            int point = partition(list, left, right);

            // 递归调用,对左子数组进行快速排序
            quickSort(list, left, point - 1);
            // 递归调用,对右子数组进行快速排序
            quickSort(list, point + 1, right);
        }
    }

    /**
     * 分割数组,找到分割点
     */
    public static int partition(int[] list, int left, int right) {
        // 用数组的第一个元素作为基准数
        int first = list[left];
        while (left < right) {
            while (left < right && list[right] >= first) {
                right--;
            }
            // 交换
            swap(list, left, right);

            while (left < right && list[left] <= first) {
                left++;
            }
            // 交换
            swap(list, left, right);
        }
        // 返回分割点所在的位置
        return left;
    }

    /**
     * 交换数组中两个位置的元素
     */
    public static void swap(int[] list, int left, int right) {
        int temp;
        if (list != null && list.length > 0) {
            temp = list[left];
            list[left] = list[right];
            list[right] = temp;
        }
    }

 

第七、归并排序

 

第八、基数排序

 

参考:https://blog.csdn.net/jiangwei0910410003/article/details/38261783

 

八大内部排序

标签:swap   ++   err   位置   info   png   sort   div   java   

原文地址:https://www.cnblogs.com/yangcao/p/11650166.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!