zoukankan      html  css  js  c++  java
  • 快速排序算法及JAVA实现

    起泡排序

    起泡排序(Bubble Sort)的过程很简单。首先将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序,则将两个记录交换之,然后比较第二个记录和第三个记录的关键字。依次类推,直至第n-1个记录和第n个记录的关键字进行比较为止,这是第一趟起泡排序,结果使得最大的关键字被安置到最后一个位置上;然后进行第二趟起泡排序,进行n-2次比较。判别起泡排序结束的条件应该是“在一趟排序过程中没有进行过交换记录的操作”。
    说明:若初始序列为正序,只需进行一趟排序;若初始序列为倒序,则需进行n-1趟排序。因此,总的时间复杂度为O(n²)。


    快速排序

    快速排序(Quick Sort)是对起泡排序的一种改进。它的思想是,通过一趟排序将待排记录分割成独立的两部分,一种一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。
    过程图解:
    这里写图片描述

    实现思路:
    ①以第一个关键字 K 1 为控制字,将 [K 1 ,K 2 ,…,K n ] 分成两个子区,使左区所有关键字小于等于 K 1 ,右区所有关键字大于等于 K 1 ,最后控制字居两个子区中间的适当位置。在子区内数据尚处于无序状态。
    ②把左区作为一个整体,用①的步骤进行处理,右区进行相同的处理。(即递归)
    ③重复第①、②步,直到左区处理完毕。

    JAVA实现:

    public class Test {
        public void quicksort(int n[], int left, int right) {
            int dp;
            if (left < right) {
                dp = partition(n, left, right);
                quicksort(n, left, dp - 1);
                quicksort(n, dp + 1, right);
            }
        }
        public int partition(int n[], int left, int right) {
            int pivot = n[left];
            while (left < right) {
                while (left < right && n[right] >= pivot)
                    right--;
                if (left < right)
                    n[left++] = n[right];
                while (left < right && n[left] <= pivot)
                    left++;
                if (left < right)
                    n[right--] = n[left];
            }
            n[left] = pivot;
            return left;
        }
        public static void main(String[] args) {
            int[] a={49,38,65,97,76,13,27,49};
            QuickSort sort=new QuickSort();
            sort.quickSort(a, 0, a.length-1);
            for(int i=0;i<a.length;i++){
                System.out.println(a[i]);
            }
        }
    
    }
  • 相关阅读:
    两线段是否相交模板
    树的距离
    Codeforces Round #369 (Div. 2)-D Directed Roads
    Codeforces Round #369 (Div. 2)-C Coloring Trees
    Codeforces Round #374 (Div. 2)-D Maxim and Array
    zstu-4243 牛吃草
    Codeforces Round #447 (Div. 2)
    zstu 4247-萌新的旅行
    CDQ分治求前缀和
    self.faceshowing = !self.facshowing无效,了,原来set
  • 原文地址:https://www.cnblogs.com/mazhitao/p/7491259.html
Copyright © 2011-2022 走看看