zoukankan      html  css  js  c++  java
  • 快速排序和插入排序例子

    public class QuickSorted
    {
        public static void main(String[] args)
        {
            int[] a = new int[10];
            
            for(int i = 0; i < a.length; i++)
            {
                a[i] = Math.round((int) (Math.random() * 50));
            }
            
            //排序前的顺序
            System.out.print("排序前:");
            for(int i = 0; i < a.length; i++)
            {
                System.out.print(a[i] + " ");
            }
    
            QuickSorted qs = new QuickSorted();
    
            //qs.sorted(a, 0, a.length - 1);
            qs.insertSorted(a);
            
            System.out.println();
    
            //排序后的顺序
            System.out.print("排序后:");
            for (int i = 0; i < a.length; i++)
            {
                System.out.print(a[i] + " ");
            }
    
            //验证排序是否正确
            System.out.println();
    
            for(int i = 0; i < a.length - 1; i++)
            {
                if(a[i] > a[i + 1])
                {        
                    System.out.println("排序错误,位置在第 " + i + "个元素");
                    break;
                }
            }
        }
    
        //快速排序
        public void sorted(int[] a, int left, int right)
        {
            if(left > right)
            {    
                return;
            }
    
            int l = left;
            int r = right;
            int baseValue = a[left];
            
            while(l < r)
            {
                //①、从右往左查找比基数小的值
                while(l < r && a[r] >= baseValue)
                {
                    r--;
                }
    
                //②、从左往右查找比基数大的值
                while(l < r && a[l] <= baseValue)
                {
                    l++;
                }    
                
                //③、如果 l < r 则交换
                if(l < r)
                {
                    a[l] = a[l] + a[r];
                    a[r] = a[l] - a[r];
                    a[l] = a[l] - a[r];
                }
            }
            
            //④、将基数放到正确位置
            //System.out.println("此时r = " + r);
            a[left] = a[r];
            a[r] = baseValue;
            
            //⑤、递归
            //递归左
            sorted(a, left, r - 1);
            //递归右
            sorted(a, r + 1, right);
        }
    
    
        //插入排序
        public void insertSorted(int[] a)
        {
               for (int i = 1; i < a.length; i++)
                {
                    if (a[i - 1] > a[i])
                    {
                        int temp = a[i];
                        int j = i;
                        while (j > 0 && a[j - 1] > temp)
                        {
                            a[j] = a[j - 1];
                            j--;
                        }
                        a[j] = temp;
                    }
                }
        }
    }
  • 相关阅读:
    stm32 复位后 引起引脚的变化,输出电平引起的问题
    利用jink的驱动软件j-flash 合并两个hex的方法,bootloader+app
    利用jink调试程序,时间不准的解决办法
    为什么你有10年经验,但成不了专家?
    第二章 信息的表示和处理
    Python人名独特性统计

    Python基本统计值计算
    VScode如何编译多个.C文件
    Python连续质数计算
  • 原文地址:https://www.cnblogs.com/GooPolaris/p/7920345.html
Copyright © 2011-2022 走看看