常用排序算法之——快速排序(C语言+VC6.0平台)

经典排序算法中快速排序具有较好的效率,但其实现思路相对较难理解。

#include<stdio.h>

int partition(int num[],int low,int high) //以key为基准 将待排数列“高”、“低 ”两部分,“高”部分的所有数据比key大,“低”部分的数据都比key小

{

int left,right,key;

left=low;right=high;key=num[low];

while(left<right)

{

while(left<right && num[right]>=key)

right--;

num[left]=num[right];

while(left<right && num[left]<=key)

left++;

num[right]=num[left];

}

num[left]=key;

return left;

}

void quick_sort(int num[],int low,int high)//递归实现快速排序

{

if(low<high)

{

int pos=partition(num,low,high);

quick_sort(num,low,pos-1);

quick_sort(num,pos+1,high);

}

}

int main()

{

int data[10]={32,33,21,14,36,7,6,4,2,11};

int i;

for(i=0;i<10;i++)

printf("%d ",data[i]);

printf("\n");

quick_sort(data,0,9);

for(i=0;i<10;i++)

printf("%d ",data[i]);

printf("\n");

}

时间: 2024-10-11 10:45:47

常用排序算法之——快速排序(C语言+VC6.0平台)的相关文章

常用排序算法之——快速排序

快速排序的原理: 首先找一个标兵值,等于某一个元素值:遍历数组,将数组分为小于标兵值和大于标兵值的两部分:然后分别对两个部分采用快速排序,递归. 分开数组时,维持一个指针,指向已找到小部分的最后一个元素:一个指针用于遍历. 不稳定排序算法.当数组已经有序时,时间复杂度最差,为O(N2),平均.最优情况下都为O(N lgN). 代码如下: 1 #include <iostream> 2 using namespace std; 3 4 template<typename T> 5 v

经典排序算法之快速排序(C语言版)

快速排序是一种很常用的排序算法. /*  * 快速排序(伪算法) 2016-04-20 23:34:16  * 1.先找到第一个元素的最终位置  * 2.对第一个元素的最终位置之前的元素,进行快速排序.  * 3.对第一个元素的最终位置之后的元素,进行快速排序.  * */ extern void QuickSort(int a[],int low,int high);//第二个参数表示第一个元素的下标,第三个参数表示最后一个元素的下标 extern int FindPos(int a[], i

常用排序算法之--快速排序

个人认为,数据结构与算法是部分程序员的软肋,而对于非科班出身的程序员来说,更是软肋中的软肋. 纠其原因,大部分是因为作为应用层面的程序开发,算法(尤其是查找算法)并不是影响程序性能的最关键的因素.同时作为一个完整的系统,从数据存储到获取都提供了 相应的调用接口,如果要获取数据,我们只需要调用外部接口就可以了.模块化.工厂化导致了我们对算法的依赖降低了.依赖降低了,就导致这部分知识的退化.只是在找工作的时候,又得重拾这部分代码.唉,不说了,要不然又该挨广大园友们喷了. 欢迎与广大朋友交流学习,qq

常用排序算法之快速排序

快速排序最坏情况运行时间为O(n2),但实际中通常都是用于排序的最佳的实用选择,因为其平均性能相当好:期望的运行时间为O(nlgn),且O(nlgn)记号中隐含的常数因子很小. 快速排序是一种就地排序.同时,是一种不稳定的排序.本文内容主要参照算法导论. 快速排序主要利用了分治的思想.一般分为三步进行: 分解:数组A[p..r]被划分为两个子数组A[p..q-1]和A[q+1..r],其中A[p..q-1]的元素都小于等于A[q],A[q+1..r]都大于等于A[q]. 解决:通过递归调用快速排

图的建立——邻接表表示(C语言+VC6.0平台)

图是一种重要而且相对复杂的数据结构,在实际编程中非常有用.邻接表是图的主要表示形式之一,是一种链接表表示方法. #include<stdio.h> #include<stdlib.h> #define MAX 10//令图的最大顶点个数为10 typedef struct node//边表结点(弧) { int adjvex;//相连顶点的编号 int weight;//边权 struct node *pnext;//指向下一个边表结点 }edgenode; typedef str

视觉直观感受7种常用排序算法

视觉直观感受若干常用排序算法 1 快速排序 介绍: 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见.事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来,且在大部分真实世界的数据,可以决定设计的选择,减少所需时间的二次方项之可能性. 步骤: 从数列中挑出一个元素,称为 "基准"(pivo

常用排序算法实现[交换排序之冒泡排序、快速排序]

相关知识 1. 稳定排序和非稳定排序: 稳定排序算法会依照相等的关键(换言之就是值)维持纪录的相对次序. 如果排序算法是稳定的,就是当有两个有相等关键的纪录R和S,且在原本的列表中R出现在S之前,在排序过的列表中R也将会是在S之前. 2. 内排序和外排序 在排序过程中,所有需要排序的数都在内存,并在内存中调整它们的存储顺序,称为内排序: 在排序过程中,只有部分数被调入内存,并借助内存调整数在外存中的存放顺序排序方法称为外排序. 3.算法分类 排序算法从理论上分为如下几类: (1) 交换排序法:

常用排序算法的python实现和性能分析

http://www.cnblogs.com/wiki-royzhang/p/3614694.html 一年一度的换工作高峰又到了,HR大概每天都塞几份简历过来,基本上一天安排两个面试的话,当天就只能加班干活了.趁着面试别人的机会,自己也把一些基础算法和一些面试题整了一下,可以阶段性的留下些脚印——没办法,平时太忙,基本上没有时间写博客.面试测试开发的话,这些也许能帮得上一些. 这篇是关于排序的,把常见的排序算法和面试中经常提到的一些问题整理了一下.这里面大概有3个需要提到的问题: 虽然专业是数

常用排序算法的python实现

排序算是编程最基本的算法问题之一了,熟练掌握排序算法也能加深自己对数据结构的理解,也能提高自己的编程能力,以下为个人参考许多大神博客后对常用排序算法的学习总结. 目录: 概述 冒泡排序 直接插入排序 简单选择排序 希尔排序 堆排序 归并排序 快速排序 算法的比较与测试 参考 1. 概述 所谓排序(sorting)就是整理数据的序列,使其按照特定顺序排列的操作.排序在现实生活中(如整理书籍,表格数据等),在计算领域中(如二分查找,图论的最小生成树的Kruskal算法)均有重要意义,所以一种高效的排