博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
快速排序
阅读量:4931 次
发布时间:2019-06-11

本文共 1855 字,大约阅读时间需要 6 分钟。

快速排序算法

快速排序一直是各大IT公司面试上机题的常考题目,如何破解一直很困惑,或者说一直忘记。下面用一种简单而且形象的描素来解决战斗。

该思想是基于填坑法和分治法的思想。下面先写算法:

填坑法:

head,tail,key

(1)       set key=A[head],so A[head] is the first “empty”(当然不是真正的空)

(2)       do tail--until find a data which is not bigger (==or <)than key, than do A[head](“empty”)=A[tail], now A[tail] is “empty”;

(3)       do head++ until find a data which is bigger than key, than do A[tail](“empty”)=A[head], so now A[head] is “empty”

(4)       do (2),(3) until head==tail;

Example:

Input: 3,2,6,5,9,0,4;

(1)     Now head=0, tail=6,key=A[head];A[head](A[0]) is “empty”

(2)     Tail--,when tail==5,A[tail]==0<key; so A[head](A[0])=A[tail]; now A[tail] is “empty”, 0,2,6,5,9,0,4;

(3)     Do head++ until head ==2,A[head]=6>key; so A[tail]()=A[head];now A[head] is “empty”;0,2,6,5,9,6,4;

(4)     Do (2),(3) until head==tail; 

Followed by: 0,2,3,5,9,6,4;

然后分治法,将上一次的key所在位置分成两个部分,分别对这两个部分再先填坑,然后分治。显然是一个迭代的过程。不多赘述。

光说不干,等于扯淡,直接上代码。

 

1 // try.cpp : Defines the entry point for the console application. 2 // 3  4 #include "stdafx.h" 5 #define FOR(n) for (int i=0;i
key){24 a[tail]=a[head];//head为坑了25 break;26 }27 head++;28 }29 }30 a[tail]=key;//用key填最后重合的坑31 return tail;32 }33 void divide(int *point ,int tail,int head){34 35 int p;36 if(tail>head){37 p=adjust(point,head,tail);38 divide(point,p-1,head);39 divide(point,tail,p+1);40 }41 }42 int main(int argc, char* argv[])43 {44 int n;45 while(scanf("%d",&n)!=EOF){
//input n digits46 FOR(n){47 scanf("%d",A+i);48 }49 divide(A,n-1,0);50 FOR(n){51 printf("%d",A[i]);52 }53 printf("\n");54 55 }56 57 return 0;58 }
View Code

 

转载于:https://www.cnblogs.com/xuexiaohei/p/4149199.html

你可能感兴趣的文章
ngx_http_core_module 模块
查看>>
两个常见的oracle索引
查看>>
一位有着工匠精神的博主写的关于IEnumerable接口的详细解析
查看>>
MySQL中特有的函数If函数
查看>>
安装Python3.6.2报错:zipimport.ZipImportError: can't decompress data; zlib not available
查看>>
【蓝桥杯】入门训练 Fibonacci数列
查看>>
实验十 指针2
查看>>
常见HTTP状态码
查看>>
vim 空格和换行的删除和替换
查看>>
ionic 入门学习
查看>>
[python]pickle和cPickle
查看>>
末日了,天是灰色的。
查看>>
Vuejs vm对象详解
查看>>
自定义RatingBar的一个问题(只显示显示一个星星)
查看>>
剑指Offer--二叉树的镜像
查看>>
PAT-BASIC-1031-查验身份证
查看>>
Python笔记5----集合set
查看>>
连连看小游戏
查看>>
js二级联动
查看>>
谜题32:循环者的诅咒
查看>>