zoukankan      html  css  js  c++  java
  • 快速排序

    快速排序对包含n个数的输入数组,最坏情况运行时间为Θ(n2), 但快速排序通常是用于排序的最佳的实用选择,

    这是因为其平均性能相当好:期望的运行时间为Θ(nlgn), 且Θ(nlgn)记号中隐含的常数因子很小,另外它还能

    进行就地排序。

    伪码:

    QUICKSORT(A, p, r)
      if p < r
        then q ← PARTITION(A, p, r)
          QUICKSORT(A, p, q - 1)
          QUICKSORT(A, q + 1, r)

    数组划分:

    PARTITION(A, p, r)
      x ← A[r]
      i ← p - 1
      for j ← p to r - 1
        do if A[j] <= x
          then i ← i + 1
            exchange A[i] ↔ A[j]
      exchange A[i + 1] ↔ A[r]
      return i + 1

    Java实现:

        public void quickSort(int[] a, int p, int r)
        {
            if (p < r)
            {
                int q = partition(a, p, r);
                quickSort(a, p, q - 1);
                quickSort(a, q + 1, r);
            }
            
        }
        
        private int partition(int[] a, int p, int r)
        {
            int x = a[r];
            int i = p - 1;
            for (int j = p; j < r; j++)
            {
                if (a[j] <= x)
                {
                    i = i + 1;
                    swap(a, i, j);
                }
            }
            swap(a, i + 1, r);
            return i + 1;
        }
        
        private void swap(int[] data, int src, int des)
        {
            int tmp = data[des];
            data[des] = data[src];
            data[src] = tmp;
        }
  • 相关阅读:
    倒计时
    用css 添加手状样式,鼠标移上去变小手
    二维数组去重方法
    权限管理
    文件操作
    【十一章】:RabbitMQ队列
    【十一章】:Memcache、Redis
    【第十章】:I/O多路复用、异步I/O(综合篇)
    【模块】:paramiko
    【第九章】:线程、进程和协程
  • 原文地址:https://www.cnblogs.com/zhuqiang/p/2486017.html
Copyright © 2011-2022 走看看