- 浏览: 1243402 次
- 性别:
- 来自: 深圳
-
文章分类
- 全部博客 (718)
- HTML (13)
- JS基础 (23)
- JS应用 (40)
- AJAX (6)
- JSP相关 (12)
- JAVA基础 (52)
- JAVA应用 (74)
- APPLET (11)
- SWING\RCP (2)
- JAVA反射 (6)
- 设计模式 (26)
- 数据库设计 (20)
- Struts (35)
- Struts2 (12)
- Spring (22)
- Hibernate (45)
- Ibatis (18)
- mybatis (3)
- SSH (8)
- UML (5)
- WebService (3)
- XML (16)
- Log4j (7)
- WEB容器 (26)
- 数据结构 (36)
- Linux (34)
- Ruby on Rails (1)
- 其它技术 (27)
- IDE配置 (15)
- 项目实战 (2)
- Oracle (69)
- JAVA报表 (7)
- Android学习 (2)
- 博客链接 (1)
- 网络基础 (1)
- WEB集群 (1)
- .Net开发 (11)
- PB (4)
- 系统构建 (15)
最新评论
-
jnjeC:
牛逼啊哥们,讲得太好了
Maven仓库理解、如何引入本地包、Maven多种方式打可执行jar包 -
九尾狐的yi巴:
很好 感谢!
Itext中文处理(更新版) -
luweifeng1983:
有用的,重启一下嘛。
设置eclipse外部修改文件后自动刷新 -
Master-Gao:
设置了也不管用,怎么破呢?
设置eclipse外部修改文件后自动刷新 -
aigo_h:
锋子还有时间写博客,还是很闲哈!
Add directory entries问题
1、算法思想
快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。
(1) 分治法的基本思想
分治法的基本思想是:将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解这些子问题,然后将这些子问题的解组合为原问题的解。
(2)快速排序的基本思想
设当前待排序的无序区为R[low..high],利用分治法可将快速排序的基本思想描述为:
①分解:
在
R[low..high]中任选一个记录作为基准(Pivot),以此基准将当前无序区划分为左、右两个较小的子区间R[low..pivotpos-
1)和R[pivotpos+1..high],并使左边子区间中所有记录的关键字均小于等于基准记录(不妨记为pivot)的关键字
pivot.key,右边的子区间中所有记录的关键字均大于等于pivot.key,而基准记录pivot则位于正确的位置(pivotpos)上,它无
须参加后续的排序。
注意:
划分的关键是要求出基准记录所在的位置pivotpos。划分的结果可以简单地表示为(注意pivot=R[pivotpos]):
R[low..pivotpos-1].keys≤R[pivotpos].key≤R[pivotpos+1..high].keys
其中low≤pivotpos≤high。
②求解:
通过递归调用快速排序对左、右子区间R[low..pivotpos-1]和R[pivotpos+1..high]快速排序。
③组合:
因为当"求解"步骤中的两个递归调用结束时,其左、右两个子区间已有序。对快速排序而言,"组合"步骤无须做什么,可看作是空操作。
2、快速排序算法QuickSort
using System;
using System.Collections.Generic;
using System.Text;
namespace ExQuickSorter
{
class QuickSorter
{
private void swap(ref int l, ref int r)
{
int temp;
temp = l;
l = r;
r = temp;
}
public void Sort(int[] list, int low, int high)
{
int pivot;//存储分支点
int l, r;
int mid;
if (high <= low)
return;
else if (high == low + 1)
{
if (list[low] > list[high])
swap(ref list[low], ref list[high]);
return;
}
mid = (low + high) >> 1;
pivot = list[mid];
swap(ref list[low], ref list[mid]);
l = low + 1;
r = high;
do
{
while (l <= r && list[l] < pivot)
l++;
while (list[r] >= pivot)
r--;
if (l < r)
swap(ref list[l], ref list[r]);
} while (l < r);
list[low] = list[r];
list[r] = pivot;
if (low + 1 < r)
Sort(list, low, r - 1);
if (r + 1 < high)
Sort(list, r + 1, high);
}
static void Main(string[] args)
{
int[] iArrary = new int[] { 1, 5, 3, 6, 10, 55, 9, 2, 87, 12, 34, 75, 33, 47 };
QuickSorter q = new QuickSorter();
q.Sort(iArrary, 0, 13);
for (int m = 0; m <= 13; m++)
Console.WriteLine("{0}", iArrary[m]);
}
}
}
发表评论
-
排序算法与查找算法
2014-09-01 10:17 395八大排序算法: http://blog.csdn.net ... -
用递归与非递归实现斐波拉希数列
2013-05-15 00:46 1920如下: package com.test; publ ... -
利用LinkedList制作一个栈
2012-12-19 21:55 894import java.util.LinkedList; ... -
递归问题求解学习一
2009-04-22 14:12 730http://blog.csdn.net/lixiaoshan ... -
算术逻辑推理学习
2009-04-23 15:52 998数字推理考察的是对 ... -
由递归所想到的:如何将字符串或者数字转换成大写货币的问题
2009-04-24 11:54 1240这个问题同事在面试的时候遇到过,最近在看有关递归的问题时 h ... -
数据结构基础--排序: 各种排序算法全分析
2009-05-06 11:35 1468http://www.cnblogs.com/ziyiFly/ ... -
数据结构-算法: 分配排序(基数分配排序法)
2009-05-06 11:41 1108http://www.cnblogs.com/ziyiFly/ ... -
数据结构-算法: 分配排序(箱分配排序)
2009-05-06 11:43 929http://www.cnblogs.com/ziyiFly/ ... -
数据结构-排序: 两路归并排序算法
2009-05-06 11:44 1751数据结构-排序: 两路归 ... -
数据结构-排序: 插入排序(直接插入排序法)
2009-05-06 11:45 1213数据结构-排序: 插入排 ... -
数据结构-算法: 插入排序(希尔排序法)
2009-05-06 11:45 1470数据结构-算法: 插入排 ... -
数据结构-排序: 选择排序(堆选择排序法)
2009-05-06 11:47 932数据结构-排序: 选择排 ... -
数据结构-排序: 交换排序(冒泡排序法)
2009-05-06 11:47 1057数据结构-排序: 交换排序(冒泡排序法) 冒泡排序(Bu ... -
数据结构-排序: 选择排序(直接选择排序法)
2009-05-06 11:48 999数据结构-排序: 选择排序(直接选择排序法) 直接选择排 ... -
C#实现--单链表(链式)
2009-05-06 11:49 1403C#实现--单链表(链式) using Syste ... -
C#实现二叉树(三元素式)及二叉树遍历的四种方法
2009-05-06 11:50 1473C#实现二叉树(三元素式) ... -
JAVA排序类汇总
2009-05-06 11:54 1246package com.softeem.jbs.lesson4 ... -
谈谈防 SQL 注入式攻击策略
2009-05-07 09:30 1436谈谈防 SQL 注入式攻击 ... -
二进制数转换为八进制, 十六进制数的算法
2009-05-07 09:44 1329using System; using System.Col ...
相关推荐
数据结构中的排序是计算机科学中一个基础且重要的概念,它涉及到如何有效地组织和处理大量数据。排序算法的主要目标是将一组无序的数据元素按照特定的标准(通常是升序或降序)排列成一个有序序列。本篇文章主要介绍...
本资源是关于数据结构中排序算法的PPT课件,全文共118页,详细介绍了排序的概念、内部排序和外部排序、内部排序方法的分类、插入排序、快速排序、堆排序、归并排序、基数排序等内容。 1. 排序的概念:排序是计算机...
### 数据结构:交换排序-冒泡排序实验指导 #### 实验背景与目标 在计算机科学领域,数据结构和算法是核心研究对象,其中排序算法作为基础且重要的算法之一,广泛应用于各类数据处理场景。本实验旨在深入理解并掌握...
### 数据结构线性表快速排序知识点解析 #### 一、数据结构基础概念 - **数据结构**:数据结构是计算机科学中的一个核心概念,它主要研究数据的逻辑结构与存储结构,以及基于这些结构的数据操作方法。良好的数据...
"数据结构--排序--思维导图" 数据结构中排序是指将一组无序的记录序列按照一定的规则排列成有序的序列,排序的目的是为了提高数据的存储和检索效率。排序算法的稳定性是指在排序过程中,如果待排序表中有两个元素Ri...
2. **内部排序的策略划分**:包括**插入排序**、**选择排序**、**交换排序**(如冒泡排序和快速排序)、**归并排序**和**基数排序**。 【评价排序算法的标准】: 1. **时间效率**:算法执行所需的时间,通常以时间...
快速排序是一种高效的排序算法,由英国计算机科学家C.A.R. Hoare在1960年提出。它基于分治法的思想,将一个大问题分解为若干小问题来解决。快速排序的基本步骤包括选择一个基准元素、划分数组以及递归排序子数组。 ...
2. 交换排序: - 快速排序:通过选择一个基准元素,将数组分成两部分,一部分小于基准,另一部分大于基准,然后递归地对这两部分进行排序。 - 冒泡排序:相邻元素两两比较,若顺序错误则交换,多次遍历直至所有...
数据结构是计算机科学中的核心概念,它研究如何组织和存储数据,以便高效地访问和修改。排序是数据处理中的基本操作,通过排序,我们可以使数据按照特定的顺序排列,方便后续的查询、分析或处理。 **C++中的排序...
### 数据结构讲义知识点概述 #### 一、绪论 - **基础知识** - **数据结构**:指相互之间存在一种或多种特定关系的数据元素的集合。数据结构不仅仅是数据元素的集合,还包括这些数据元素之间的关系以及作用在其上的...
本文将深入探讨标题"数据结构-排序的简洁代码"中提及的几种经典排序算法:冒泡排序、插入排序、选择排序、快速排序以及qsort和归并排序。这些算法都是C语言实现的,非常适合初学者进行学习和实践。 1. 冒泡排序:这...
在计算机科学领域,数据结构和排序算法是至关重要的基础,它们直接影响到程序的效率和性能。本资源包“数据结构-各种排序完整示例程序”提供了C语言实现的各种经典排序算法,帮助学习者深入理解并掌握这些算法的实际...
在插入排序类中讨论了直接插入排序、二分法插入排序、表插入排序和shell 排序算法:在交换排序类中讨论了起泡排序和快速排序算法:在选择排序类中讨论了简单选择排序、锦标赛排序和堆排序算法;在归并排序类中讨论了...
"数据结构-排序.ppt" 在计算机科学中,排序算法是指将一组无序的记录序列调整为有序的记录序列的算法。排序算法的重要性在于,它可以将大量的数据按一定的规律顺次排列起来,使得数据更加有序和易于管理。 排序的...
本文将深入探讨标题"数据结构--内部排序"中涉及的几种主要排序算法,并对描述中提及的插入排序、Shell排序、冒泡排序、快速排序、简单选择排序以及堆排序进行详细解析。 1. 插入排序:插入排序是一种简单的排序算法...
### 数据结构-排序问题(C++) #### 概述 在计算机科学中,排序是一种将一组数据按照特定顺序排列的过程。排序算法对于提高程序效率至关重要,尤其是在处理大量数据时。根据给定文件的信息,本文将深入探讨五种...
- 交换类排序法:冒泡排序、快速排序。 - 插入类排序法:简单插入排序、希尔排序。 - 选择类排序法:简单选择排序、堆排序。 #### 二、程序设计基础 1. **源程序文档化**: - 注释的重要性:提高代码的可读性...
- 快速排序:利用分治法,选取基准元素并将其左右两侧的子序列分别进行排序。 - 归并排序:同样采用分治策略,将数组分为两半分别排序后再合并。 2. **C语言编程基础**: - 变量声明与类型:理解int、char、...
### 数据结构排序实验报告知识点解析 #### 实验背景与目的 - **实验背景**:本实验报告来源于南昌大学科学技术学院信息学科部计算机系的一次专业课程实验。《数据结构》作为一门重要的计算机基础课程,其目的在于...
- 交换法排序:如快速排序、希尔排序等,通过交换元素来调整序列。 - 归并排序:利用分治策略,将序列分为两半,分别排序后再合并。 - 基数排序:基于数字的位来进行排序,适合处理整数或固定长度的字符串。 每...