zoukankan      html  css  js  c++  java
  • 简单排序总结

    冒泡排序

    代码: j 为内层循环 i 代表排序轮数排序,轮数为数组 length - 1, 因为最后剩余一个值不用排序 一定为最小元素。内层比较相邻的两个元素 当 a[j] > a[j + 1] 进行交换

      第一轮 i = 0 ; j 从 1-> a.length

      第二轮 i = 1 ; j 从 2-> a,length -1 (因为第一层排序最大值已经找出,所以最后一个值不用排序)

      第三轮......

      第length -1 轮

    package sort_test;
    
    public class mao_pao {
        public static void main(String args[]) {
            int a[] = {10 ,1, 2, 5, 7, 3, 6, 8};
            for (int i = 0; i<a.length; i ++) {
                for (int j = 1; j < a.length - i; j++) {
                    if (a[j-1] > a[j]) {
                        int temp;
                        temp = a[j];
                        a[j] = a[j-1];
                        a[j-1] = temp;
                    }
                }
            }
            for (int sort: a) {
                System.out.println(sort);
            }
        }
    }

     折半快速排序

      创建一个基准元素 所有元素和其进行比对,两个指针记录左右两边比对数据位置

      1. 从右向左比对

        右侧元素 > 基准 交换 再进行左侧比对

      2.从左向右比对

        左侧元素 < 基准元素 交换 再进行右侧比对

      参照 https://www.cnblogs.com/hjy9420/p/5032309.html

    package sort_test;
    
    public class quick_sort {
        public static void main(String[] args) {
            int[] a = { 1, 10, 2, 3, 4, 5, 6, 3, 30, 17, 14 };
            int start = 0;
            int end = a.length - 1;
            quickSort(a, start, end);
            for (int i = 0; i < a.length; i++) {
                System.out.println(a[i]);
            }
        }
    
        public static void quickSort(int[] a, int low, int high) {
            int start = low;
            int end = high;
            int key = a[low];
    
            while (end > start) {
                // 从后往前比较
                // 如果没有比关键值小的,比较下一个,直到有比关键值小的交换位置,然后又从前往后比较
                while (end > start && a[end] >= key) {
                    end--;
                }
                if (a[end] <= key) {
                    int temp = a[end];
                    a[end] = a[start];
                    a[start] = temp;
                }
                // 从前往后比较
                // 如果没有比关键值大的,比较下一个,直到有比关键值大的交换位置
                while (end > start && a[start] <= key) {
                    start++;
                }
                if (a[start] >= key) {
                    int temp = a[start];
                    a[start] = a[end];
                    a[end] = temp;
                }
                // 此时第一次循环比较结束,关键值的位置已经确定了。
                // 左边的值都比关键值小,右边的值都比关键值大,但是两边的顺序还有可能是不一样的,进行下面的递归调用
            }
            // 递归
            // 左边序列。第一个索引位置到关键值索引-1
            if (start > low) {
                quickSort(a, low, start - 1);
            }
            // 右边序列。从关键值索引+1到最后一个
            if (end < high) {
                quickSort(a, end + 1, high);
            }
        }
    }

        

  • 相关阅读:
    Jenkins Install
    提高C#代码质量的22条准则
    游戏程序员英文指南
    苹果设备内存指南
    Unity符号表
    UI优化策略-UI性能优化技巧
    C# 语言历史版本特性
    CPU SIMD介绍
    Unity渲染性能指标
    关于JMeter线程组中线程数,Ramp-Up Period,循环次数之间的设置概念
  • 原文地址:https://www.cnblogs.com/lixuchun/p/8846081.html
Copyright © 2011-2022 走看看