快速排序(Quick Sort)的基本思想是通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对着两部分记录继续进行排序,以达到整个序列有序,具体步骤为
  1. 设立枢轴,将比枢轴小的记录移到低端,比枢轴大的记录移到高端,直到low=high停止
  2. 分别对枢轴低高端部分再次快速排序(即重复第1步)
  3. 重复第1、2步,直到low=high停止

C语言实现(编译器Dev-c++5.4.0,源代码后缀.cpp)

原创文章,转载请注明来自钢铁侠Mac博客http://www.cnblogs.com/gangtiexia

 #include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 6
#define OK 1
#define ERROR 0 typedef int Status;
typedef int KeyType;
typedef char InfoType;//要malloc() typedef struct{
KeyType score;
InfoType name[];
}RedType;//记录类型 typedef struct{
RedType r[MAXSIZE+];
int length;
}SqList;
/*
Name: 初始化
Copyright:
Author: leo
Date: 10-12-15 16:54
Description: 初始化顺序表
*/ Status initSqList(SqList &l){
l.length=MAXSIZE;
printf("%d",l.length);
for(int i=;i<=l.length;i++){
printf("请输入第%d个同学的名字和分数",i);
gets(l.r[i].name);
scanf("%d",&(l.r[i].score));
getchar();
printf("\n");
} return OK;
}
/*
Name: 部分排序
Copyright: http://www.cnblogs.com/gangtiexia
Author: 钢铁侠
Date: 10-12-15 17:00
Description: 反复按照枢轴进行快速排序:将比枢轴大的放在一边,比枢轴小的放在另一边
*/ int partition(SqList &l,int low,int high){
l.r[]=l.r[low];//枢轴
while(low<high){
while(low<high&&l.r[high].score>l.r[].score) high--;
l.r[low]=l.r[high];
while(low<high&&l.r[low].score<l.r[].score) {
printf("\nhigh为%d\n",high);
low++;}
l.r[high]=l.r[low];
}
l.r[low]=l.r[];
return low;
} /*
Name: 启动递归快速排序
Copyright: http://www.cnblogs.com/gangtiexia
Author: 钢铁侠
Date: 11-12-15 14:37
Description: 启动递归快速排序,并进行第一个大部分(所有记录)的快速排序
*/ Status QuickSort(SqList &l,int low,int high){
int pivotloc;
if(low<high){
pivotloc=partition(l,low,high);
QuickSort(l,low,pivotloc-);
QuickSort(l,pivotloc+,high);
}
return OK;
} Status Traverse(SqList &l){
for(int i=;i<=MAXSIZE;i++)
{
printf("%s的分数为%d \n",l.r[i].name,l.r[i].score);
}
} int main(){ SqList L;
initSqList(L);
printf("L.length为%d",L.length);
QuickSort(L,,L.length);
Traverse(L);
return ;
}

快速排序(Quick Sort)的C语言实现的更多相关文章

  1. [算法] 快速排序 Quick Sort

    快速排序(Quick Sort)使用分治法策略. 它的基本思想是:选择一个基准数,通过一趟排序将要排序的数据分割成独立的两部分:其中一部分的所有数据都比另外一部分的所有数据都要小.然后,再按此方法对这 ...

  2. 基础排序算法之快速排序(Quick Sort)

    快速排序(Quick Sort)同样是使用了分治法的思想,相比于其他的排序方法,它所用到的空间更少,因为其可以实现原地排序.同时如果随机选取中心枢(pivot),它也是一个随机算法.最重要的是,快速排 ...

  3. 快速排序Quick sort

    快速排序Quick sort 原理,通过一趟扫描将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归 ...

  4. Java中的经典算法之快速排序(Quick Sort)

    Java中的经典算法之快速排序(Quick Sort) 快速排序的思想 基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小, 然后再按此方法对 ...

  5. 快速排序(Quick Sort)C语言

    已知数组 src 如下: [5, 3, 7, 6, 4, 1, 0, 2, 9, 10, 8] 快速排序1 在数组 src[low, high] 中,取 src[low] 作为 关键字(key) . ...

  6. quicksort 快速排序 quick sort

    * Java基本版 package cn.mediamix; import java.util.LinkedList; public class QuickSort { public static v ...

  7. 排序算法 - 快速排序(Quick Sort)

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

  8. 快速排序算法回顾 --冒泡排序Bubble Sort和快速排序Quick Sort(Python实现)

    冒泡排序的过程是首先将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序,则将两个记录交换,然后比较第二个记录和第三个记录的关键字.以此类推,直至第n-1个记录和第n个记录的关键字进行过比较为止 ...

  9. 基础算法之快速排序Quick Sort

    原理 快速排序(Quicksort)是对冒泡排序的一种改进. 从数列中挑出一个元素,称为"基准"(pivot); 排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的 ...

  10. 快速排序——Quick Sort

    基本思想:(分治) 先从数列中取出一个数作为key值: 将比这个数小的数全部放在它的左边,大于或等于它的数全部放在它的右边: 对左右两个小数列重复第二步,直至各区间只有1个数. 辅助理解:挖坑填数 初 ...

随机推荐

  1. HDOJ 2053 Switch Game

    Problem Description There are many lamps in a line. All of them are off at first. A series of operat ...

  2. 手机app

    手机app是什么? 由于iPhone.三星等智能手机的逐步流行和广泛普及,手机app这个词语开始频繁的出现在广大手机网民的视线中.也许你们还不知道什么是手机app,但你一定下载过手机app,你的手机里 ...

  3. Let it Bead

    http://poj.org/problem?id=2409 // File Name: poj2409.cpp // Author: bo_jwolf // Created Time: 2013年1 ...

  4. java中的代理

    package cn.itcast.day3; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationHan ...

  5. mysql 循环插入100w

    use md5db; DROP PROCEDURE if exists myFunction; delimiter $$ CREATE PROCEDURE myFunction() BEGIN DEC ...

  6. 利用spring AOP 实现统一校验

    开发环境 JDK: 1.7 spring: 4.0.6 aspect: 1.7.4 应用背景   在APP与后台通讯的过程中,我们一般都会有个authToken的字符串校验,判断那些请求是需要校验用户 ...

  7. Shiro Quartz之Junit測试Session管理

    Shiro的quartz主要API上提供了org.apache.shiro.session.mgt.quartz下session管理的两个类:QuartzSessionValidationJob和Qu ...

  8. [转] linux之sed用法

    sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作,下面先了解一下sed的用法sed命令行格式为:         sed ...

  9. PHP: 深入pack/unpack <转> [链接]

    PHP: 深入pack/unpack PHP: chr和pack.unpack那些 PHP: pack/unpack补遗

  10. Python之路,Day10 - 异步IO\数据库\队列\缓存

    Python之路,Day9 - 异步IO\数据库\队列\缓存   本节内容 Gevent协程 Select\Poll\Epoll异步IO与事件驱动 Python连接Mysql数据库操作 RabbitM ...