快速排序法

原创 2006年06月21日 12:36:00

****************快速排序法BEGIN***********************

#include <iostream.h>
#include <stdio.h>
#include <windows.h>
void qkpass(int a[],int *p1,int *p2){//以数组a[]的第一个数为基准
 int tag=*p1;                     //大于它的放后面,小于它的放前面
    while(p1!=p2){
  while((*p2>tag||*p2==tag)&&p2!=p1) p2--;
  if(*p2<tag&&p2!=p1){
   *p1=*p2;
   p1++;
  }
  if(p2==p1) break;
  while(p1!=p2&&(*p1<tag||*p1==tag)) p1++;
  if(*p1>tag&&p1!=p2){
   *p2=*p1;
   p2--;
  }
  if(p2==p1) break;
 }
 *p1=tag;       //此时p1==p2,把做为基准值的tag赋给当前位置
}
void QuickOrder(int a[],int *p1,int *p2){
 int *t1=new int,*t3=new int,*t2=new int ;//定义三个指针来保存状态
 t1=p1;t2=p2;
 if(p1<p2){
  qkpass(a,p1,p2);//对整个数组进行运算
  t3=p2;
  qkpass(a,t1,p2--);//对原数组第一个数前的数排序
  qkpass(a,t3++,t2);//对原数组第一个数后的数进行排序
 }
}
void main(){
 int sum[9]={4,3,2,8,7,5,6,0,1};
 int i=0;
  int *p1=new int ,*p2=new int;
 p1=sum;p2=sum+8;
 QuickOrder(sum,p1,p2);//调用函数
 for(int k=0;k<=8;k++) //输出排序过后的数组
  cout<<sum[k]<<"   ";
}

****************快速排序法OVER***********************

运行结果当然是:0 1 2 3 4 5 6 7 8 

 哈哈,又写了一个

快速排序理解(挖坑填坑比喻理解)

快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用,因此很多软件公司的笔试面试,包括像腾讯,微软等知名IT公司都喜欢考这个...
  • WitsMakeMen
  • WitsMakeMen
  • 2013年12月02日 22:01
  • 4316

快速排序法应用

题目:第一行输入整数,表示数组大小,第二行输入一个数组,第三行输入两个整数s,m,要求将数组中的元素从 s到m降序输出,要求利用快速排序法。 源程序: #include #include ...
  • It_BeeCoder
  • It_BeeCoder
  • 2016年10月22日 20:12
  • 357

快速排序法 java实现 三种方法实现

快速排序法 (1)定义 快速排序使用分治的思想,通过一趟排序将待排序列分割成两部分,其中一部分记录的关键字均比另一部分记录的关键字小。之后分别对这两部分记录继续进行排序,以达到整个序列有序的目的。 (...
  • u013276277
  • u013276277
  • 2017年05月18日 14:27
  • 984

学过的算法中最快捷——快速排序法

上次总结了其他的三种算法:选择排序、冒泡排序和插入排序,这次总结一个更加高效的排序算法——快速排序法,如果想要了解其余三种算法,请移步c#版选择法、冒泡法、插入法和快速排序法分析与对比...
  • cd18333612683
  • cd18333612683
  • 2016年05月15日 20:24
  • 990

几种常用的排序算法(快速排序,希尔排序,堆排序,选择排序,冒泡排序)

1、归并排序       基本原理:归并排序也称合并排序,其算法思想是将待排序序列分为两部分,依次对分得的两个部分再次使用归并排序,之后再对其进行合并。操作步骤如下。 (1)将所要进行的排序序列分为左...
  • wenqingping5
  • wenqingping5
  • 2017年10月17日 20:47
  • 163

八大排序算法 之 快速排序(填坑法)

排序思想: 1,将第一个数字作为基准数字,将数组分为左右两部分,左边是比它小的数字,右边是比它大的数字; 2,将左部分按照上面的思想再次进行划分成两部分,依次类推; 3,将右部分按照上面的思想再...
  • yxb_yingu
  • yxb_yingu
  • 2016年05月07日 11:36
  • 1036

结合题目讲解“快速排序算法”

根据一道快速排序算法自考题,进行学习方法上的反思,同时讲解自己对快速排序算法的理解...
  • sun15732621550
  • sun15732621550
  • 2016年10月16日 16:44
  • 2483

【排序算法】快速排序原理及Java实现

快速排序是我们之前学习的冒泡排序的升级,他们都属于交换类排序,都是采用不断的比较和移动来实现排序的。快速排序是一种非常高效的排序算法,它的实现,增大了记录的比较和移动的距离,将关键字较大的记录从前面直...
  • jianyuerensheng
  • jianyuerensheng
  • 2016年04月27日 09:08
  • 26574

快速排序的C语言源代码与分析

快速排序的基本思想是: 通过一躺排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按次方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此...
  • guoyong10721073
  • guoyong10721073
  • 2012年09月27日 15:35
  • 30205

“挖坑填坑”理解快速排序

快速排序的基本思路:找一个基准元素,对数组进行调整,调整的标准是,这个基准元素的左边存放的都是比这个元素小的,右边都是比这个元素大的。然后分而治之,对左右两边的子数组利用同样的规则调整,调整到每一个子...
  • N_sev7
  • N_sev7
  • 2017年09月21日 21:27
  • 189
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:快速排序法
举报原因:
原因补充:

(最多只允许输入30个字)