交换排序_2.快速排序
来源:互联网 发布:淘宝上传图片怎么上传 编辑:程序博客网 时间:2024/05/01 06:53
快速排序:
快速排序的基本算法思想是;设待排序的元素序列个数为n,存放在数组a中,令第一个元素为枢轴元素,即将a[0]作为参考元素,令pivot=a[0].初始时,令i=0;j=a.Legth-1;然后按以下方法操作:
(1).从序列的j位置往前,依次将数组的中的元素与枢轴元素相比较,如果当前元素大于等于枢轴元素,则将前一个元素与枢轴元素相比较,否则将当前元素移动到位置i,即比较a[j]与pivot,如果a[j]>=pivot,则连续执行j--操作,直到找到一个元素,使a[j]<pivot,则将a[j]移动到a[i]中,并执行一次i++;
(2).从序列的i位置开始,一次将元素值与枢轴元素相比较。如果当前元素小于枢轴元素,则将后一个元素与枢轴元素相比较,否则,将当前元素移动的位置j,即比较a[i]与pivot,如果a[i]<pivot,则连续执行i++,直到遇到一个元素使a[i]>=pivot,将a[i]移动到a[j]中,并执行一次j--;
(3).循环执行步骤1,2,直到出现i>=j,将元素pivot移动到a[j]中,此时整个元素序列被位置j划分为两个部分,前一部分元素的值都小于枢轴,后一部分元素的值都大于枢轴。即完成看一次快速排序。
实现代码:(C#实现)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace kuaisupaixu
{
class Program
{
static void Main(string[] args)
{
int[] b = new int[] { 37, 19, 43, 22, 22, 89, 26, 92 };//待排序数组
int low = 0;
int high = b.Length - 1;
digui(b,low,high);
for (int n = 0; n < b.Length; n++)
{
Console.WriteLine(b[n]);
}
Console.ReadKey();
}
static void digui(int[] b,int low,int high){
int m;
if (low < high) {
m = paiXu(b, low, high);//得到返回的枢轴所在的索引
digui(b, low, m-1);//将枢轴左面的子序列进行排序
digui(b, m + 1, high);//将枢轴右面的子序列进行排序
}
}
static int paiXu(int[] a,int i,int j){
int p=a[i];//把枢轴记录下来
while (i < j) {
while (i < j && a[j] >= p) {
j--;
}
if (i < j) {
a[i] = a[j];
i++;
}
while (i < j && a[i] < p) {
i++;
}
if (i < j) {
a[j] = a[i];
j--;
}
}
a[i] = p;
return j;
}
}
}
快速排序是一种不稳定的排序算法,时间复杂度为O(nlog2n)(n倍的log2底n)。
- 交换排序_2.快速排序
- 排序_2.快速排序
- 排序算法_2,快速排序
- 交换排序--快速排序
- 交换排序:快速排序
- 交换排序-快速排序
- 交换排序-快速排序
- 交换排序------快速排序
- 【交换排序】快速排序
- 交换排序---快速排序
- 交换排序-快速排序
- 交换排序-快速排序
- 交换排序--快速排序
- 交换排序-快速排序
- 交换排序之----快速排序
- 交换排序之快速排序
- 交换排序:快速排序 学习
- 【交换排序】快速排序--Java
- linux上安装mysql5.6.4
- ERROR L104: MULTIPLE PUBLIC DEFINITIONS
- Red5-1.0-RC1整合到tomcat,logback报错问题
- [历史] 明太祖朱元璋直系后裔 - 朱镕基
- HDU 4849 Wow! Such City! 最短路
- 交换排序_2.快速排序
- 【畅言】程序员可以只关心技术么?
- STL vector中的emplace方法(23)
- IT忍者神龟之PLSQL执行sql的几种方法
- CCSpriteBatchNode
- 菜鸟进军c++(二)--类与对象
- IT忍者神龟之PLSQL导入/导出数据方法
- cocos2dx3.2学习笔记之Scene、Layer、Sprite
- Javascript中值得注意的用法