知识大全 c#与算法--快速排序

Posted 数列

篇首语:书本上的知识而外,尚须从生活的人生中获得知识。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 c#与算法--快速排序相关的知识,希望对你有一定的参考价值。

   从事 net工作两年 当初学到的数据结构算法一直没有在实际工作中用到 近日闲来无事 突发奇想要温习一下简单的数据结构算法 今日 用了一个下午的时间完成了排序中的 快速排序 以此作为入驻博客园的首篇随笔!思想向后 是否将其放到首页?最后 还是厚著脸皮 大著胆子决定放 但始终战战兢兢 心中不免忐忑 虽然内容很简单 但确实我是在用心写 希望它能够被人看到 好了 闲话少叙 在下已做好挨骂准备!如果管理员觉得此文不妥 就请随意处置吧 呵呵

   快速排序 是采用递归的方式对待排序的数列进行若干次的操作 每次操作使得被操作的数列部分以某个元素为分界值分成两部分 一部分小于该分界值 另一部分大于该分界值 该分界值一般被称为 枢轴

   以数列 为例 详细描述执行一趟快速排序的算法:

   选择待排序数列的枢轴 一般以数列的首元素作为枢轴 此数列中 我们选择首元素 作为枢轴 nPivot =

   设定两个指针 i 和 j 分别指向数列的首元素和尾元素 i 指向首元素 j 指向尾元素 示意图如下:

   向前移动尾指针 j 使其指向从数列尾部算起首个小于枢轴(即 )的元素 并将该元素置换到头指针 i 指向的位置 _nArray[i] =_nArray[j] 示意图如下:

  首次执行该操作时 i 指针指向处的值实际上就是枢轴的值 此处的操作可以理解为 i 指针指向处的值已在之前被置换到枢轴中 此时 i 指向处已经是一个空位 在此时用找到的小于枢轴的元素填在此处

   向后移动头指针 i 使其指向从数列头部算起首个大于枢轴(即 )的元素 并将该元素置换到尾指针 j 指向的位置 _nArray[j] =_nArray[i] 示意图如下:

  此处同样可以理解为 j 指针指向处的值已在上一步操作中置换了出去 j 处已是一个空位

   如此重复执行步骤 和步骤 直至 i==j 时结束该循环

   退出了该循环后 i 与 j 必定指向同一位置 在该位置的前部元素 其值均小于枢轴 而在该位置的后部元素 其值均大于枢轴 显而易见 此时 i 和 j 同时指向的位置就应该是枢轴的 新家 _nArray[i]=nPivot 如下图:

  至此 一趟排序结束 待排序数列的首元素将该数列分成了比其小和比其大的两部分 如下图:

  接着 我们对这一大一小两部分子数列执行相同的排序操作

  如此 递归 直至对整个数列完成排序操作

   以下是c#实现代码:

cha138/Article/program/net/201311/15634

相关参考

知识大全 C#排序算法大全

C#排序算法大全  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!冒泡排序  学语言要花大力气学数据结

知识大全 C#实现选择排序算法

C#实现选择排序算法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  选择排序  classSel

知识大全 排序算法的各趟排序算法

  以关键字序列()为例分别写出执行以下排序算法的各趟排序结束时关键字序列的状态  ()直接插入排序()希尔排序()冒泡排序()快速排序  ()直接选择排序()堆排序()归并排序()基数排序  上述方

知识大全 排序算法的各趟排序算法

  以关键字序列()为例分别写出执行以下排序算法的各趟排序结束时关键字序列的状态  ()直接插入排序()希尔排序()冒泡排序()快速排序  ()直接选择排序()堆排序()归并排序()基数排序  上述方

知识大全 简单介绍C#冒泡排序

简单介绍C#冒泡排序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  今天主要是将排序算法中最简单

知识大全 排序 - 交换排序 - 快速排序 (一)

  快速排序(QuickSort)  算法思想  快速排序是CRAHoare于年提出的一种划分交换排序它采用了一种分治的策略通常称其为分治法(Divideand  ConquerMethod)  ()

知识大全 排序 - 交换排序 - 快速排序 (四)

  算法分析  快速排序的时间主要耗费在划分操作上对长度为k的区间进行划分共需k次关键字的比较  ()最坏时间复杂度  最坏情况是每次划分选取的基准都是当前无序区中关键字最小(或最大)的记录划分的结果

知识大全 排序 - 交换排序 - 快速排序 (二)

  划分算法Partition  ()简单的划分方法  ①具体做法  第一步(初始化)设置两个指针i和j它们的初值分别为区间的下界和上界即i=lowi=high;选取无序区的第一个记录  R[i](即

知识大全 JS实现随机化快速排序

JS实现随机化快速排序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  算法的平均时间复杂度为O(

知识大全 数据结构考研分类复习真题 第十章 排序[62]

  .快速分类算法中如何选取一个界值(又称为轴元素)影响着快速分类的效率而且界值也并不一定是被分类序列中的一个元素例如我们可以用被分类序列中所有元素的平均值作为界值编写算法实现以平均值为界值的快速分类