美文网首页
3 - JAVA实现快速排序

3 - JAVA实现快速排序

作者: minminaya | 来源:发表于2017-03-27 10:57 被阅读106次

基本思想:

  • 基于"二分"思想
  • 找一个数作为基准数,然后左右俩个探针开始找茬,
  • 先从右边开始找,找到比它小的数的位置a
  • 接着从左边开始找,找到比它大的数,换位置b
  • 如果他们的探针位置没有相遇,就交换a,b
  • 如果探针他们遇到了,归位基准数
  • 递归调用,左边与右边

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

/**
 * @author NIWA
 *
 * 
 * 依次输入5个数字
 */
public class Main {
    int[] a = new int[100];
    int temp;//基准数
    static int n;//排序个数
    int i;
    int j;
    public static void main(String[] args) {
        Main mMain = new Main();
        mMain.scanf();
        mMain.sort(1, n);
        mMain.print();

    }


    private void print() {
        for (int i = 1; i <= n; i++) {
            System.out.println(a[i]);
        }
    }

    /**
     *  输入数据
     * */
    private void scanf() {
        Scanner sc1 =new Scanner(System.in);
        n = sc1.nextInt();

        for (int i = 1; i <= n; i++) {
            Scanner sc2 = new Scanner(System.in);
            a[i] = sc2.nextInt();
        }
    }

    /**
     * 快速排序
     */
    private void sort(int left, int right) {
        if(left > right){
            return;
        }

        temp = a[left];

        i = left;
        j = right;
        while(i != j){
            //顺序很重要,要从右边开始向左找,找比基准数小的
            while(a[j] >= temp && i < j){
                j--;//如果大于temp,那就接着找
            }
            
            //从左边向右找比基准数大的
            while(a[i] <= temp && i < j){
                i++;
            }

            
            //如果还没相遇,那就交换两个数在数组中的位置
            if(i < j){
                int t;
                t = a[i];
                a[i] = a[j];
                a[j] = t;
            }
        }
        
        //基准数归位,放到该放的位置
        a[left] = a[i];
        a[i] = temp;
        
        
        sort(left, i-1);//继续处理左边的,这里是一个递归的过程
        sort(i+1, right);//右边的
    }
}

测试

6
8 7 5 3 9 4

输出
3 4 5 7 8 9

时间复杂度

  • 最坏情况,可以是=相邻的俩个数进行了交换,最差时间复杂度和冒泡排序一样是O(N^2)
  • 平均时间复杂度为O(NlogN)

相关文章

  • 数据结构&算法(一)

    一、Java实现快速排序算法 二、Java实现折半插入排序算法 三、Java实现冒泡排序算法

  • 快速排序

    快速排序Java实现

  • 7 天时间,我整理并实现了这 9 种最经典的排序算法

    回顾 我们前面已经介绍了 3 种最常见的排序算法: java 实现冒泡排序讲解 QuickSort 快速排序到底快...

  • 快速排序

    手写java版快速排序算法实现

  • 常见排序的java实现

    常见排序的java实现 常见排序java实现 插入排序(二分插入排序) 希尔排序 快速排序(三数中值快排) 冒泡排...

  • 常用排序算法的Java实现

    冒泡、插入、选择、归并、快速排序的Java实现

  • 排序

    八大排序算法 一、归并排序 递归及非递归的JAVA实现 二、快速排序 快排算法JAVA实现 三、堆排序 堆排序堆排...

  • 3 - JAVA实现快速排序

    基本思想: 基于"二分"思想 找一个数作为基准数,然后左右俩个探针开始找茬, 先从右边开始找,找到比它小的数的位置...

  • 面试知识点

    排序冒泡排序快速排序选择排序插入排序二路归并 查找二分查找 排序和查找的java实现 java语言Java字符串字...

  • 排序算法

    排序 1. 选择排序 代码实现 2. 插入排序 代码实现 3. 冒泡排序 代码实现 4. 快速排序 代码实现

网友评论

      本文标题:3 - JAVA实现快速排序

      本文链接:https://www.haomeiwen.com/subject/wxalottx.html