快速排序1.1

  • 描述
  • 代码实现

描述

在昨天的文章中,每次将最左边的元素设为轴,而快速排序法的加速在于轴的选择,在这个例子中,只将轴设定为中间的元素,依这个元素作基准进行比较,这可以增加快速排序法的效率。

代码实现

C++实现:

// Quick2.cpp : 定义控制台应用程序的入口点。
//#include "StdAfx.h"
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 10
#define SWAP(x,y) {int t; t = x; x = y; y = t;}
void quicksort(int[], int, int);
int main(void) {int number[MAX] = {0};int i, num;srand(time(NULL));printf("排序前:");for(i = 0; i < MAX; i++) {number[i] = rand() % 100;printf("%d ", number[i]);}quicksort(number, 0, MAX-1);printf("\n排序后:");for(i = 0; i < MAX; i++)printf("%d ", number[i]);printf("\n");return 0;
}
void quicksort(int number[], int left, int right) {int i, j, s;if(left < right) {s = number[(left+right)/2];i = left - 1;j = right + 1;while(1) {while(number[++i] < s) ; // 向右找while(number[--j] > s) ; // 向左找if(i >= j)break;SWAP(number[i], number[j]);}quicksort(number, left, i-1); // 对左边进行递回quicksort(number, j+1, right); // 对右边进行递回}
}

Java实现:

package com.immunize.Arithmetic;/*** 快速排序1.1:调整标准criterion为中间值* * @author Mr IMMUNIZE**/
public class QuickForward {public static void main(String[] args) {int[] arr = { 1, 3, 5, 2, 22, 13, 6, 78, 65 };QuickSort1(arr, 0, arr.length - 1);Print(arr);}public static void QuickSort1(int[] number, int left, int right) {int i, j, crit, tmp;if (left > right)return;crit = number[(left + right) / 2];i = left - 1;j = right + 1;while (true) {while (number[++i] < crit);while (number[--j] > crit);if (i >= j) {break;}tmp = number[i];number[i] = number[j];number[j] = tmp;}QuickSort1(number, left, i - 1);QuickSort1(number, j + 1, right);}public static void Print(int[] number) {for (int i = 0; i < number.length; i++) {System.out.print(number[i] + " ");}System.out.println();}
}

20191013:快速排序1.1相关推荐

  1. Golang TDD实践报告:快速排序Quick Sort

    Golang TDD实践报告:快速排序Quick Sort [阅读时间:约5分钟] 0.项目需求 1.编写符合项目输入输出的一个测试 2.尝试运行测试 3.先使用最少的代码来让失败的测试先跑起来 4. ...

  2. 算法图解/二分查找/简单查找/选择排序/递归算法/快速排序算法/

    大 O 表示法 大 O 表示法在讨论运行时间时,log 指的都是 log2 大 O 表示法指出了算法有多快,让你能够比较操作数,它指出了算法运行时间的增速,而并非以秒为单位的速度. 大 O 表示法指出 ...

  3. 数据结构学习(十三)、快速排序

    基本思想:通过一趟排序将待排记录分割成独立两个部分,其中一部分记录的关键字均比另一部分记录的关键字小, 则可分别对这两部分继续进行排序,重复操作以上操作,已达到整个序列有序的目的 void Quick ...

  4. 快速排序(快排)--->注释超详细

    基本思想:         1.先选取一个基准值(一般选取数组第一个元素).         2.以第一步选取的基准值为标准,然后从最后一个数值开始一步步向前走将数字与基准值进行比较,如果该值大于基准 ...

  5. 快速排序的两种实现方法(c语言版本)

    经过调研发现,对任意无序整数数组,快速排序有两种实现方法,这里简单阐述下思路: 思路一:随意选择一个基准元,一般选择数组的起始元或末尾元,Weiss这本书上特意搞了个算法来选择基准元,--,总之就是基 ...

  6. 【经典算法】快速排序

    与归并排序一样,快速排序使用也使用了分治的思想.下面是对一个典型的子数组A[p,...,r]进行快速排序的三步分治过程: 分解:数组A[p,...,r]被划分成两个(可能为空)子数组A[P,...,q ...

  7. 20140725 快速排序时间复杂度 sTL入门

    1.快速排序的时间复杂度(平均时间复杂度为) 数组本身就有序时,效果很差为O(n^2) 2.STl入门 (1) C++内联函数(inline)和C中宏(#define)区别 内联函数有类型检查,宏定义 ...

  8. java 快排_八大排序-快速排序(搞定面试之手写快排)

    概要 快速排序由C. A. R. Hoare在1960年提出,是八大排序算法中最常用的经典排序算法之一.其广泛应用的主要原因是高效,核心算法思想是分而治之.快速排序经常会被作为面试题进行考察,通常的考 ...

  9. 排序学习之---快速排序

    一.前言 快速排序是一种交换排序,它由C. A. R. Hoare在1962年提出. 二.算法思想 快速排序的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分:分割点左边都是比它小的数,右边都 ...

最新文章

  1. 怎么修改CAD编辑器中默认的线型
  2. Linux下正则表达式和grep命令的使用
  3. 2016中国知识管理发展的7个趋势
  4. 计算机软考网络工程师历年真题,计算机软考《网络工程师》考试历年真题精选(1)...
  5. Python内存管理方式和垃圾回收算法解析
  6. Java JUC工具类--Semaphore
  7. 3.2. 添加模板版本(Core Data 应用程序实践指南)
  8. [BZOJ 2152]聪聪可可(点分治)
  9. python 虚线_Python 包安装和管理工具 pip 19.2 发布
  10. freebsd 同步工具unison
  11. 《图书管理系统》—需求分析报告
  12. 小迪渗透测试学习笔记(一)基础入门-概念名词
  13. 站长说说之SEO流量翻倍增长的秘密
  14. 智课雅思词汇---十八、前缀peri是什么意思
  15. 清除浮动2021-08-25
  16. percentile函数mysql_Oracle分析函数PERCENTILE_CONT
  17. 正则表达式校验正数/负数
  18. 【报告分享】2021年小红书内容营销趋势洞察-千瓜(附下载)
  19. 【操作系统】CSAPP学习笔记
  20. vim使用:全局搜索并跳转

热门文章

  1. 你能说出 Kafka 这些原理吗?
  2. 「大数据+」依然火热!BDTC首日爆点有点多!
  3. 500+ 精选 Java 面试题大放送
  4. 2019 最新 200 道 Java 面试题
  5. “硅谷女王”传奇:她是谷歌云 CEO,创立巨头 VMware
  6. NB-IoT 备胎转正的背后,究竟意味着什么?
  7. 程序员该不该主动提加薪?| 畅言
  8. 每秒几十万的大规模网络爬虫是如何炼成的?
  9. 人间真实:程序员的 60 个崩溃瞬间!
  10. 从 SAS 到 NVMe,换个底盘就完儿事了?