递归方式实现简单的快速排序

news/2024/5/19 21:47:55 标签: 快速排序, C, Python

快速排序: 一种广受程序猿们追捧的排序算法。其基本思想为:选定一个基准值,然后以此基准值为中间枢纽,将列表中各元素划分到两个区间去——大于枢纽值的区间和小于枢纽值的区间。在两区间内再选取各自新的枢纽值,划分成新的区间,直到每个区间都只有一个元素为止,排序完成。

def quicksort(array):
    if len(array) < 2:
        return array
    else:
        pivot = array[0]
        less = [i for i in array[1:] if i <= pivot]
        greater = [i for i in array[1:] if i > pivot]
        return quicksort(less) + [pivot] + quicksort(greater)

print quicksort([10, 5, 2, 3])
#include <stdio.h>

#define MAX 100
typedef  struct
{
	int element[MAX];
	int length;
}Queue;

void swap(Queue *L, int i, int j)
{
	int temp = L->element[i];
	L->element[i] = L->element[j];
	L->element[j] = temp;
}

int FindKey(Queue *L, int low, int high)
{
	int PKey;
	PKey = L->element[low];
	while (low < high)
	{
		while (low < high && L->element[high] >= PKey)
		{
			high--;
		}
		swap(L, low, high);
		while (low < high && L->element[low] <= PKey)
		{
			low++;
		}
		swap(L, low, high);
	}
	return low;
}
void Qsort(Queue *L, int low, int high)
{
	int key;
	if (low < high)
	{
		key = FindKey(L,low,high);
		Qsort(L, low, key - 1);
		Qsort(L, key + 1, high);
	}
}

void QuickSort(Queue *L)
{
	Qsort(L,0,L->length);
}
void Print(Queue L)
{
	for (int i = 0; i < L.length; i++)
	{
		printf("%d  ", L.element[i]);
	}
}
int main()
{
	Queue L;
	int d[MAX] = { 50,10,90,30,70,40,80,60,20 };
	for (int i = 0; i < 9; i++)
	{
		L.element[i] = d[i];
	}
	L.length = 8;
	QuickSort(&L);
	Print(L);
	return 0;
}

 


http://www.niftyadmin.cn/n/1014352.html

相关文章

word、excel、网页表格代码表导入到MySQL数据库

word、excel、网页表格代码表导入到MySQL数据库目标&#xff1a;将[url]http://www.cstj.gov.cn/upload/newstxt/dmfl.htm[/url]代码表导入到DB2数据库。第一感&#xff1a;这个代码表超多&#xff0c;手动复制拼写或者直接添加到DB2数据库大概需要六七个小时。还不能保证百分百…

一个js分页类,可把table分页,有实例

//JavaScript Document/**//*** js分页类* param iAbsolute 每页显示记录数* param sTableId 分页表格属性ID值&#xff0c;为String* param sTBodyId 分页表格TBODY的属性ID值,为String,此项为要分页的主体内容* Version 1.0.0* author 辛现宝 2007-01-15 created* var __vari…

计算机思维:抽象及接口

原文&#xff1a;想成为计算机大牛&#xff0c;必须掌握的一种思维方式&#xff1a;抽象及接口 非门、与门&#xff0c;或门&#xff0c;是《计算机原理》中必须了解的门电路。 有了这三个门电路&#xff0c;就可以更好的表示模拟布尔代数。 门电路是用来承载布尔代数具体实现的…

也谈PHP 调用 Java的问题

也谈PHP调用java的问题首先要谴责一下uc这个产品&#xff0c;你们的这个产品对一些浏览器支持也太差了吧&#xff01;害的我又重写一遍&#xff0c;累啊&#xff01;其次感谢我的学生提供了一个很有水平的话题&#xff0c;也让我们再一次领略一下php的魅力。也让我们看到一些所…

JAVA中日期的处理

JAVA中日期的处理 &#xff08;在此声明&#xff0c;这篇为非原创&#xff0c;只是在网上一朋友的帖子&#xff0c;在这里转载一下&#xff0c;便于以后学习使用&#xff0c;无商业目的&#xff09;Java 语言的Calendar&#xff0c;GregorianCalendar (日历),Date(日期), 和Dat…

C语言(二)字符数组、字符串、字符指针及字符串常用操作

目录 一、字符数组初始化 二、数组名不允许自加自减 三、字符串操作内存示意图 四、字符串拷贝函数 五、求字符串中某一子串出现的次数 六、删除给定字符串中的空格 方式1&#xff1a;当字符不为结束符时&#xff0c;从头到尾扫描&#xff0c;遇非空格则拷贝&#xff0…

对两种web开发中经常出现的异常问题的总结(NoClassDefFound,ClassNotFound)

这一段时间经常在论坛上看到&#xff08;NoClassDefFound&#xff0c;ClassNotFound&#xff09;这两重异常抛出&#xff0c; 下面就是我从网上搜集的关于出现这两种异常的问题 NoClassDefFound: 当 Java 虚拟机或 ClassLoader 实例试图在类的定义中加载&#xff08;作为通常…

手动增加使用者 pwck

手动增加使用者一般来说&#xff0c;我们不很建议大家使用手动的方式来新增使用者&#xff0c;为什么呢&#xff1f; 因为使用者的建立涉及到 GID/UID 等权限的关系&#xff0c;而且&#xff0c;与档案/目录的权限也有关系&#xff0c; 使用 useradd 可以帮我们自动设定好 UID/…