C语言版数据结构及算法_快速排序

/*

参数:

a:数组首地址

left:需要排序的数组的开始位置

right:需要排序的数组的结束位置

*/

void qSort(int *a,int left,int right){

//快速排序

if (left>=right) {

return;

}else{

int value=a[left];

int initLeft=left;

int initRight=right;

while (left!=right) {

while (value<a[right]) {

right--;

}

while (value>=a[left]&&right>left) {

left++;

}

if (value<a[left]) {

int x=a[right];

a[right]=a[left];

a[left]=x;

}else{

if (value>a[right]) {

int x=a[right];

a[right]=a[initLeft];

a[initLeft]=x;

}

}

}

qSort(a, initLeft, right-1);

qSort(a, right+1, initRight);

}

}

原文地址:https://www.cnblogs.com/3yangyue3/p/8663066.html

时间: 2024-10-07 03:05:38

C语言版数据结构及算法_快速排序的相关文章

C语言版数据结构算法

C语言版数据结构算法 C语言数据结构具体算法 https://pan.baidu.com/s/19oLoEVqV1I4UxW7D7SlwnQ C语言数据结构演示软件 https://pan.baidu.com/s/1u8YW897MjJkoOfsbHuadFQ 在上一篇的FIFO中就是基于数据结构思维中的队列实现的,而基本的数据结构内容还有 算法效率分析.线性表.栈和队列.串.数组和广义表.树和二叉树.图.查表.排序.动态存储管理 上面两个链接就是<数据结构(C语言版)>严蔚敏教授严奶奶的书籍

python数据结构与算法 35 快速排序

快速排序 快速排序也使用了分而治之的策略来提高性能,而且不需要额外的内存,但是这么做的代价就是,列表不是对半切分的,因而,性能上就有所下降. 快速排序选择一个数值,一般称为"轴点",虽然有很多选取轴点的方法,我们还是简单地把列表中第一个元素做为轴点了.轴点的作用是帮助把列表分为两个部分.列表完成后,轴点所在的位置叫做"切分点",从这一点上把列表分成两部分供后续调用. 图12所示,54将作为轴点.这个例子我们已经排过多次了,我们知道54在排好序后将处于现在31的位置上

用python语言讲解数据结构与算法总述(一)

关于数据结构与算法讲解的书籍很多,但是用python语言去实现的不是很多,最近有幸看到一本这样的书籍,由Brad Miller and David Ranum编写的<Problem Solving with Algorithms and Data Structures Using Python>,地址为:http://interactivepython.org/runestone/static/pythonds/index.html是英文的,写的不错,里面代码的实现也很详细,很多有趣的例子,于

数据结构排序算法之快速排序

排序算法包括很多种,其中快速排序是其中一种比较快的排序算法,今天就来介绍一下: 快速排序的基本实现思想就是将当前待排序列分成两个部分.一个值.一个值:就是选定出一个值作为被比较的元素.两个部分:所有比该被选定元素大的部分都去该元素的右边,所有比被选定元素小的部分都去该元素的左边.这样我们就确定了该元素在这个待排序列中的位置,其实也就是我们已经将这个元素“排好了”. 那么,怎么才能完成一次的快速排序呢? 我们选定一个被比较的元素,一般都是选第一个,即数组中第一个元素作为val,然后我们给出两个指针

算法_快速排序

快速排序是一种分治的排序算法.它将一个数组分成两个子数组,将两部分独立的排序.快速排序和归并排序是互补的:归并排序将数组分成两个子数组分别排序,并将有序的子数组归并并将整个数组排序,而快速排序将数组排序的方式则是当两个子数组都有序的时候,整个数组就自然有序了,切分是快速排序中最重要的操作.这个过程使得数组满足下面的条件: 1.对于某个j,a[j]已经排定 2.a[lo]到a[j-1]中的所有元素都不大于a[j]. 3.a[j+1]到a[hi]中的所有元素都不小于a[j]. 策略是先随意的取a[l

Python实现的数据结构与算法之快速排序详解

一.概述 快速排序(quick sort)是一种分治排序算法.该算法首先 选取 一个划分元素(partition element,有时又称为pivot):接着重排列表将其 划分 为三个部分:left(小于划分元素pivot的部分).划分元素pivot.right(大于划分元素pivot的部分),此时,划分元素pivot已经在列表的最终位置上:然后分别对left和right两个部分进行 递归排序. 其中,划分元素的 选取 直接影响到快速排序算法的效率,通常选择列表的第一个元素或者中间元素或者最后一

【数据结构与算法】—— 快速排序

通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列.[来自百度百科] 快排介绍 老样子,前面有介绍 快排思路 快速排序,在学习的时候,老师就说,快排,是分而治之.就像中国 960 万疆土,分成省市县镇乡村去管辖.这就是分而治之.在各自的辖区内,各自管辖,互不干涉,最后再把结果汇总,就形成了我中华960万的疆土.那这个辖区怎么划分?这就需要一个标准,这

研磨数据结构与算法-09快速排序

快速排序: /* * 快速排序 */ public class QuickSort { /** * 划分数组 */ public static int partition(long arr[],int left, int right,long point) { int leftPtr = left - 1; int rightPtr = right; while(true) { //循环,将比关键字小的留在左端 while(leftPtr < rightPtr && arr[++le

数据结构与算法_韩顺平14十大算法

14.1 14.1 二分查找(非递归) package com.atguigu.binarysearchnorecursion; public class BinarySearchNoRecur { public static void main(String[] args) { //测试 int[] arr = {1,3, 8, 10, 11, 67, 100}; int index = binarySearch(arr, 100); System.out.println("index=&qu