`

数据结构-排序: 交换排序(快速排序法)

阅读更多

数据结构-排序: 交换排序(快速排序法)

1、算法思想
 快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。

(1) 分治法的基本思想
 分治法的基本思想是:将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解这些子问题,然后将这些子问题的解组合为原问题的解。

(2)快速排序的基本思想
 设当前待排序的无序区为R[low..high],利用分治法可将快速排序的基本思想描述为:
①分解:
 在 R[low..high]中任选一个记录作为基准(Pivot),以此基准将当前无序区划分为左、右两个较小的子区间R[low..pivotpos- 1)和R[pivotpos+1..high],并使左边子区间中所有记录的关键字均小于等于基准记录(不妨记为pivot)的关键字 pivot.key,右边的子区间中所有记录的关键字均大于等于pivot.key,而基准记录pivot则位于正确的位置(pivotpos)上,它无 须参加后续的排序。
注意:
 划分的关键是要求出基准记录所在的位置pivotpos。划分的结果可以简单地表示为(注意pivot=R[pivotpos]):
 R[low..pivotpos-1].keys≤R[pivotpos].key≤R[pivotpos+1..high].keys
其中low≤pivotpos≤high。
②求解:
 
通过递归调用快速排序对左、右子区间R[low..pivotpos-1]和R[pivotpos+1..high]快速排序。
③组合:
 因为当"求解"步骤中的两个递归调用结束时,其左、右两个子区间已有序。对快速排序而言,"组合"步骤无须做什么,可看作是空操作。

2、快速排序算法QuickSort

using System;
using System.Collections.Generic;
using System.Text;

namespace ExQuickSorter
{
class QuickSorter
{
private void swap(ref int l, ref int r)
{
int temp;
temp = l;
l = r;
r = temp;
}
public void Sort(int[] list, int low, int high)
{
int pivot;//存储分支点
int l, r;
int mid;
if (high <= low)
return;
else if (high == low + 1)
{
if (list[low] > list[high])
swap(ref list[low], ref list[high]);
return;
}
mid = (low + high) >> 1;
pivot = list[mid];
swap(ref list[low], ref list[mid]);
l = low + 1;
r = high;
do
{
while (l <= r && list[l] < pivot)
l++;
while (list[r] >= pivot)
r--;
if (l < r)
swap(ref list[l], ref list[r]);
} while (l < r);
list[low] = list[r];
list[r] = pivot;
if (low + 1 < r)
Sort(list, low, r - 1);
if (r + 1 < high)
Sort(list, r + 1, high);
}

static void Main(string[] args)
{
int[] iArrary = new int[] { 1, 5, 3, 6, 10, 55, 9, 2, 87, 12, 34, 75, 33, 47 };
QuickSorter q = new QuickSorter();
q.Sort(iArrary, 0, 13);
for (int m = 0; m <= 13; m++)
Console.WriteLine("{0}", iArrary[m]);
}
}
}

分享到:
评论

相关推荐

    数据结构--排序 很细致

    数据结构中的排序是计算机科学中一个基础且重要的概念,它涉及到如何有效地组织和处理大量数据。排序算法的主要目标是将一组无序的数据元素按照特定的标准(通常是升序或降序)排列成一个有序序列。本篇文章主要介绍...

    数据结构-排序PPT课件.pptx

    本资源是关于数据结构中排序算法的PPT课件,全文共118页,详细介绍了排序的概念、内部排序和外部排序、内部排序方法的分类、插入排序、快速排序、堆排序、归并排序、基数排序等内容。 1. 排序的概念:排序是计算机...

    数据结构:交换排序-冒泡排序实验指导

    ### 数据结构:交换排序-冒泡排序实验指导 #### 实验背景与目标 在计算机科学领域,数据结构和算法是核心研究对象,其中排序算法作为基础且重要的算法之一,广泛应用于各类数据处理场景。本实验旨在深入理解并掌握...

    数据结构线性表快速排序

    ### 数据结构线性表快速排序知识点解析 #### 一、数据结构基础概念 - **数据结构**:数据结构是计算机科学中的一个核心概念,它主要研究数据的逻辑结构与存储结构,以及基于这些结构的数据操作方法。良好的数据...

    数据结构--排序--思维导图.pdf

    "数据结构--排序--思维导图" 数据结构中排序是指将一组无序的记录序列按照一定的规则排列成有序的序列,排序的目的是为了提高数据的存储和检索效率。排序算法的稳定性是指在排序过程中,如果待排序表中有两个元素Ri...

    数据结构-C语言版:DS09-排序.ppt

    2. **内部排序的策略划分**:包括**插入排序**、**选择排序**、**交换排序**(如冒泡排序和快速排序)、**归并排序**和**基数排序**。 【评价排序算法的标准】: 1. **时间效率**:算法执行所需的时间,通常以时间...

    数据结构-快速排序

    快速排序是一种高效的排序算法,由英国计算机科学家C.A.R. Hoare在1960年提出。它基于分治法的思想,将一个大问题分解为若干小问题来解决。快速排序的基本步骤包括选择一个基准元素、划分数组以及递归排序子数组。 ...

    22%-数据结构-c语言-排序算法(8种).ppt

    2. 交换排序: - 快速排序:通过选择一个基准元素,将数组分成两部分,一部分小于基准,另一部分大于基准,然后递归地对这两部分进行排序。 - 冒泡排序:相邻元素两两比较,若顺序错误则交换,多次遍历直至所有...

    C++数据结构-排序

    数据结构是计算机科学中的核心概念,它研究如何组织和存储数据,以便高效地访问和修改。排序是数据处理中的基本操作,通过排序,我们可以使数据按照特定的顺序排列,方便后续的查询、分析或处理。 **C++中的排序...

    数据结构讲义

    ### 数据结构讲义知识点概述 #### 一、绪论 - **基础知识** - **数据结构**:指相互之间存在一种或多种特定关系的数据元素的集合。数据结构不仅仅是数据元素的集合,还包括这些数据元素之间的关系以及作用在其上的...

    数据结构-排序的简洁代码

    本文将深入探讨标题"数据结构-排序的简洁代码"中提及的几种经典排序算法:冒泡排序、插入排序、选择排序、快速排序以及qsort和归并排序。这些算法都是C语言实现的,非常适合初学者进行学习和实践。 1. 冒泡排序:这...

    数据结构-各种排序完整示例程序

    在计算机科学领域,数据结构和排序算法是至关重要的基础,它们直接影响到程序的效率和性能。本资源包“数据结构-各种排序完整示例程序”提供了C语言实现的各种经典排序算法,帮助学习者深入理解并掌握这些算法的实际...

    数据结构-排序.ppt

    "数据结构-排序.ppt" 在计算机科学中,排序算法是指将一组无序的记录序列调整为有序的记录序列的算法。排序算法的重要性在于,它可以将大量的数据按一定的规律顺次排列起来,使得数据更加有序和易于管理。 排序的...

    数据结构--内部排序

    本文将深入探讨标题"数据结构--内部排序"中涉及的几种主要排序算法,并对描述中提及的插入排序、Shell排序、冒泡排序、快速排序、简单选择排序以及堆排序进行详细解析。 1. 插入排序:插入排序是一种简单的排序算法...

    数据结构-排序问题(C++)

    ### 数据结构-排序问题(C++) #### 概述 在计算机科学中,排序是一种将一组数据按照特定顺序排列的过程。排序算法对于提高程序效率至关重要,尤其是在处理大量数据时。根据给定文件的信息,本文将深入探讨五种...

    公共基础复习资料

    - 交换类排序法:冒泡排序、快速排序。 - 插入类排序法:简单插入排序、希尔排序。 - 选择类排序法:简单选择排序、堆排序。 #### 二、程序设计基础 1. **源程序文档化**: - 注释的重要性:提高代码的可读性...

    数据结构排序实验报告

    ### 数据结构排序实验报告知识点解析 #### 实验背景与目的 - **实验背景**:本实验报告来源于南昌大学科学技术学院信息学科部计算机系的一次专业课程实验。《数据结构》作为一门重要的计算机基础课程,其目的在于...

    综合排序 程序 数据结构(C语言) 课程设计

    - 快速排序:利用分治法,选取基准元素并将其左右两侧的子序列分别进行排序。 - 归并排序:同样采用分治策略,将数组分为两半分别排序后再合并。 2. **C语言编程基础**: - 变量声明与类型:理解int、char、...

    数据结构1800例题与答案.rar

    - 快速排序:基于分治策略,选取基准元素,将数组分为两部分并分别排序。 - 归并排序:也是分治策略,将数组分成两半,分别排序后再合并。 - 堆排序:利用堆的特性实现排序。 6. **搜索算法**: - 线性搜索:...

Global site tag (gtag.js) - Google Analytics