快速排序(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. UIAlertView弹出框

    <Alert弹出框提示用户信息>    1.遵循代理方法<UIAlertViewDelete>    2.调用方法UIAlertView *alert = [[UIAlertV ...

  2. POJ 3978 Primes(求范围素数个数)

    POJ 3978 Primes(求范围素数个数) id=3978">http://poj.org/problem? id=3978 题意: 给你一个区间范围A和B,要你求出[A,B]内 ...

  3. [Javascript] Automating Releases with semantic-release

    There are so many repeated steps when releasing a new version of a library. The tool semantic-releas ...

  4. ThinkPHP pdo连接Oracle的配置写法,提示报错

    'DB_TYPE' => 'pdo', // 数据库类型 'DB_USER' => 'user101', // username 'DB_PWD' => 'zb~!@#$%', // ...

  5. [转] boost库的Singleton的实现以及static成员的初始化问题

    http://www.cnblogs.com/kex1n/archive/2011/04/05/2006194.html effectie c++的条款4中提到: (global对象,定义在names ...

  6. 谈谈iOS中粘性动画以及果冻效果的实现

    在最近做个一个自定义PageControl——KYAnimatedPageControl中,我实现了CALayer的形变动画以及CALayer的弹性动画,效果先过目: https://github.c ...

  7. Java基础知识强化之IO流笔记12:递归之递归解决问题的思想(图解)

    1. 使用递归计算5!的结果,递归思想的本质如下: 2. 下面就要使用代码实现这个递归: 递归实现分析: (1)做递归要写一个方法 (2)出口条件 (3)规律 代码实现如下: package com. ...

  8. 9.8 noip模拟试题

    LazyChild黑OJ(blackoj.pas/c/cpp) LazyChild开了一家“善良OJ”.但大多数人都不知道,这其实是家黑OJ.亲爱的同学,请不要惊讶,古时候有黑店,现代为什么不能有黑O ...

  9. redisbook笔记——redis内存映射数据结构

    虽然内部数据结构非常强大,但是创建一系列完整的数据结构本身也是一件相当耗费内存的工作,当一个对象包含的元素数量并不多,或者元素本身的体积并不大时,使用代价高昂的内部数据结构并不是最好的办法. 为了解决 ...

  10. My.Ioc 代码示例——Lifetime 和 ILifetimeScope

    很多 Ioc 框架在创建对象的过程中,都会采取某种方式来缓存/复用/释放已构建的对象.在 My.Ioc 中,这个目的是通过 Lifetime/ILifetimeScope 来实现的.其中,Lifeti ...