快速排序和插入排序例子

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;
                }
            }
    }
}
原文地址:https://www.cnblogs.com/GooPolaris/p/7920345.html