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;
                    }
                }
        }
    }
  • 相关阅读:
    day06.2-软链接与硬链接
    day06.1-磁盘管理
    day05.3-Linux进程管理
    day05.2-Vim编辑器
    day05.1-文件归档与压缩
    day04-Linux系统中用户控制及文件权限管理方法
    day03-Linux操作系统目录结构
    day02.2-常用Linux命令整理
    BST_traverse(中序遍历,前序遍历,后序遍历)
    JS_DOM_practice with Pokemon
  • 原文地址:https://www.cnblogs.com/GooPolaris/p/7920345.html
Copyright © 2011-2022 走看看