快速排序(Quick Sort)的C语言实现
- 设立枢轴,将比枢轴小的记录移到低端,比枢轴大的记录移到高端,直到low=high停止
- 分别对枢轴低高端部分再次快速排序(即重复第1步)
- 重复第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语言实现的更多相关文章
- [算法] 快速排序 Quick Sort
		快速排序(Quick Sort)使用分治法策略. 它的基本思想是:选择一个基准数,通过一趟排序将要排序的数据分割成独立的两部分:其中一部分的所有数据都比另外一部分的所有数据都要小.然后,再按此方法对这 ... 
- 基础排序算法之快速排序(Quick Sort)
		快速排序(Quick Sort)同样是使用了分治法的思想,相比于其他的排序方法,它所用到的空间更少,因为其可以实现原地排序.同时如果随机选取中心枢(pivot),它也是一个随机算法.最重要的是,快速排 ... 
- 快速排序Quick sort
		快速排序Quick sort 原理,通过一趟扫描将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归 ... 
- Java中的经典算法之快速排序(Quick Sort)
		Java中的经典算法之快速排序(Quick Sort) 快速排序的思想 基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小, 然后再按此方法对 ... 
- 快速排序(Quick Sort)C语言
		已知数组 src 如下: [5, 3, 7, 6, 4, 1, 0, 2, 9, 10, 8] 快速排序1 在数组 src[low, high] 中,取 src[low] 作为 关键字(key) . ... 
- quicksort  快速排序 quick sort
		* Java基本版 package cn.mediamix; import java.util.LinkedList; public class QuickSort { public static v ... 
- 排序算法 - 快速排序(Quick Sort)
		算法思想 快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序.它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod). (1) 分治法的基本思想 ... 
- 快速排序算法回顾   --冒泡排序Bubble Sort和快速排序Quick Sort(Python实现)
		冒泡排序的过程是首先将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序,则将两个记录交换,然后比较第二个记录和第三个记录的关键字.以此类推,直至第n-1个记录和第n个记录的关键字进行过比较为止 ... 
- 基础算法之快速排序Quick Sort
		原理 快速排序(Quicksort)是对冒泡排序的一种改进. 从数列中挑出一个元素,称为"基准"(pivot); 排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的 ... 
- 快速排序——Quick Sort
		基本思想:(分治) 先从数列中取出一个数作为key值: 将比这个数小的数全部放在它的左边,大于或等于它的数全部放在它的右边: 对左右两个小数列重复第二步,直至各区间只有1个数. 辅助理解:挖坑填数 初 ... 
随机推荐
- ArrayList、LinkedList、HashMap底层实现
			ArrayList 底层的实现就是一个数组(固定大小),当数组长度不够用的时候就会重新开辟一个新的数组,然后将原来的数据拷贝到新的数组内. LinkedList 底层是一个链表,是由java实现的一个 ... 
- Linux一键安装PHP/JAVA环境OneinStack
			OneinStack 是一款PHP/JAVA环境一键配置工具. OneinStack包含以下组合 lnmp(Linux + Nginx+ MySQL ... 
- java随机数与数组的使用。
			java随机数与数组的使用. 一:题目 二 代码: public class Students { int number; // 学号 int State ; // 年级 ... 
- 删除表中多余的重复记录(多个字段),只留有rowid最小的记录
			假如表Users,其中ID为自增长. ID,Name,Sex 1 张三,男 2 张三,男 3 李四,女 4 李四,女 5 王五,男 --查找出最小行号ID的重复记录 select Name,Sex,C ... 
- 计算任意位数的Pi
			当用程序实现求pi的值时,也许你能够很快写出算法(利用求pi的几个公式),但是由于使用单变量保存结果,限于计算机硬件对变量的表示范围有限,因此,最多只能计算出pi值小数点后十多位.但需要得到一个更大位 ... 
- Qt 学习之路 :可视化显示数据库数据
			前面我们用了两个章节介绍了 Qt 提供的两种操作数据库的方法.显然,使用QSqlQuery的方式更灵活,功能更强大,而使用QSqlTableModel则更简单,更方便与 model/view 结合使用 ... 
- [转] Javascript中数组与字典(即object)的使用
			简述: 简单记录一下数据结构字典和数组, 其实在Javascript这种弱类型的脚本语言中,数组同时也就是字典,下面主要就是字典数组的简易使用 代码: 1. 数组中添加map <!DOCTYPE ... 
- Creating a Navigation Drawer  创建一个导航侧边栏
			The navigation drawer is a panel that displays the app’s main navigation options on the left edge of ... 
- HDU 4607 Park Visit(树的直径)
			题目大意:给定一棵树,让求出依次访问k个点的最小花费,每条边的权值都为1. 思路:如果能一直往下走不回来,那么这个路径肯定是最小的,这就取决于给定的k,但是怎么确定这个能一直走的长度呢,其实这个就是树 ... 
- C#错误异常列表
			Exception: 所有异常对象的基类. SystemException:运行时产生的所有错误的基类. IndexOutOfRangeException:当一个数组的下标超出范围时运行时引发. Nu ... 
