结构(快速排序)

快速排序=挖坑填数+分治法

【举例】

66 13 51 76 81 26 57 69 23
23 13 51 57 26 66 81 69 76

【Pascal版】


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

procedure Qsort(l,r:longint);

var i,j,t:longint;

begin

    i:=l;j:=r;t:=a[i];   //在i处挖坑

    while i<j do

    begin

        while (i<j)and(a[j]>=t) do dec(j);

        if(i<j) then begin a[i]:=a[j]; inc(i); end;  //挖j填i

        while (i<j)and(a[i]<=t) do inc(i);

        if(i<j) then begin a[j]:=a[i]; dec(j); end;  //挖i填j

    end;

    a[i]:=t;    //填i

    if l<i-1 then Qsort(l,i-1);

    if r<j+1 then Qsort(i+1,r);

end;

  

【C++版】


1

2

3

4

5

6

7

8

9

10

11

12

void Qsort(int L,int R){

    int i=L,j=R,t=a[i];    //在i处挖坑

    while(i<j){

        while(i<j && a[j]>=t)j--;

        if(i<j){a[i]=a[j]; i++; }  //挖j填i

        while(i<j && a[i]<=t)i++;

        if(i<j){a[j]=a[i]; j--; }  //挖i填j

    }

    a[i]=t;  //填i

    if(l<i-1) Qsort(l,i-1);

    if(r<j+1) Qsort(i+1,r);

}

  

时间: 2024-11-05 20:34:08

结构(快速排序)的相关文章

使用C++/C qsort 标准库对结构体进行快速排序

C++标准快速排序库qsort进行结构体快速排序 代码如下 1 #include <stdio.h> 2 #include <stdlib.h> 3 typedef struct 4 { 5 int date; 6 int value; 7 }X_S; 8 9 /* a->z */ 10 int cmpfunA2Z(const void * a, const void * b) 11 { 12 X_S * p1 = (X_S *)a; 13 X_S * p2 = (X_S *

49.大量qq号及qq密码挖掘到结构体并实现精确分配内存以及快速排序

原数据: 处理后的数据: 完整代码: 1 //思路; 2 //数据清洗(把空格替换成'\0') -> 精确获取每一行(要提前获取source的总长度) -> 获取出每一行再精确分割并把分割后的数据赋给结构体 3 4 #define _CRT_SECURE_NO_WARNINGS 5 #include <iostream> 6 #include <stdlib.h> 7 #include <string.h> 8 9 //要被挖掘的数据 10 char str

68.qq号索引结构体写入内存,并实现快速排序

1 //两个步骤,第一步读取文件,并且初始化索引结构体,把初始化的索引结构体写入到文件,第二步,读取这个文件到索引结构体 2 //并对这个结构体进行快速排序,得到顺序的索引,再写入文件 3 #define _CRT_SECURE_NO_WARNINGS 4 #include<stdio.h> 5 #include<stdlib.h> 6 7 char path[256] = "QQ.txt"; 8 char indexpath[256] = "QQin

C++线性表通过结构体实现操作和结构体字符串快速排序和shell排序结合

#include<iostream> #include<string> #define ml 10 using namespace std; typedef struct{//定义Data数据项 std::string name; long num; }Data; struct Link{//定义结构体 Data data[ml+1]; int length; }L; void initLink(Link *p){//初始化,即便有数据可以覆盖写入增加效率 p->length

结构-行为-样式-Js排序算法之 快速排序

快速排序算法,是我的算法系列博客中的第二个Js实现的算法,主要思路:    在一个数组中随机取一个数(一般都取第一个或者最后一个),使这个数与数组中其他数进行比较,如果比它大就放到它的右边,比它小就放到这个数的左边,依次递归调用直到比较队列中只有两个数. 代码实现: var arrs = [23,85,61,37,55,12,63,11,99,39,70,21,23]; function QuickSort(arr , s,e){ var len = e; var token = arr[s];

Swift实现的快速排序及sorted方法的对比

Swift语言有着优秀的函数式编程能力,面试的时候面试官都喜欢问我们快速排序,那么用Swift如何实现一个快速排序呢?首先扩展Array类: extension Array { var decompose : (head: T, tail: [T])? { return (count > 0) ? (self[0], Array(self[1..<count])) : nil } } 属性decompose的作用是返回数组中的第一个元素和剩下的元素,注意这个属性是可选型的,当count为0的时

排序算法----快速排序(链表形式)

单链表形式实现排序算法. 这个快速排序主要利用递归调用.包含4个文件,头文件QuickSort.h,fatal.h,库函数QuickSort.c,测试文件TestQuickSort. QuickSort.h 1 typedef long ElementType; 2 #ifndef _List_H//如果没有编译过 3 #include<stdbool.h> 4 struct Node; 5 typedef struct Node *PtrToNode; 6 typedef PtrToNode

排序算法大荟萃——快速排序算法

1.快速排序 又称分治算法,分治的基本思想是蒋原问题分解为若干个规模更小但结构与原问题相似的子问题,然后递归地解决这鞋子问题,子问题的结组合为原问题的解. 快速排序是一种不稳定的算法,平均时间复杂度为O(n log n),最差情况是O(n^2),空间复杂度O(log n) (1)基本思想 过程如下:分解->求解->组合. 分解:在无序队列R[1...n]中任选一个元素k为基准记录,并且满足R[1...k].key<=R[k].key<=R[k+1...n].key 求解:递归调用快

iOS算法(一)快速排序算法

快速排序是当遇到较大数据时,排序快,高效的方法(公司面试时,基本上会被问到...) 该方法的基本思想是: 1.先从数列中取出一个数作为基准数. 2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边. 3.再对左右区间重复第二步,直到各区间只有一个数. 简单地理解就是,找一个基准数(待排序的任意数,一般都是选定首元素),把比小于等于基准数的元素放到基准数的左边,把大于基准数的元素放在基准数的右边.排完之后,在把基准数的左边和右边各看成一个整体,  左边:继续选择基准数把小于