快速排序&基数排序
//快速排序
#include<stdio.h> void QuickSort(int R[],int low,int high)
{
int i=low,j=high;
int pivot;
if(low<high)
{
pivot=R[i];
while(i!=j)
{
while(i!=j && R[j]>pivot)
j--;
R[i]=R[j];
while(i!=j && R[i]<pivot)
i++;
R[j]=R[i];
}
R[i]=pivot;
QuickSort(R,low,i-);
QuickSort(R,j+,high);
} } int main()
{
int a[]={,,,,,,,,,};
int i;
printf("原 :");
for(i=;i<;i++)
printf("%d ",a[i]);
printf("\n排序后:");
QuickSort(a,,);
for(i=;i<;i++)
printf("%d ",a[i]);
return ;
}
//快速排序中用到递归,递归实质是一个循环
/*
while(条件) //条件=递归出口
{
function(变化的参数);
}
*/
//递归的思想是异级同构
//基数排序
#include<stdio.h>
// 乾卦
// 2014-5-3
//获取数字的十位数
int get_ten(int n)
{
return(n/); }
//获取数字的个位数
int get_single(int n)
{
return (n%);
}
int main()
{
int arr[][]={}; //存储索引,相同的数字最大存10个
int ind_arr[]={}; //每行的存储长度
int R[]={,,,,,,,,,};
int i,j,index;
int k;
//按个位数排序
for(i=;i<;i++)
{
index=get_single(R[i]); //获取每个数字的个位数
arr[index][ind_arr[index]]=i; //存储在R中的索引
ind_arr[index]++;
}
//我们看看按照个位数排序后的输出
printf("按照个位数排序:\n");
for(i=;i<;i++)
{
for(j=;j<ind_arr[i];j++) //先输出行
{
printf("%d ",R[arr[i][j]]);
}
}
printf("\n");
//遍历,整个数组然后从十位数最小的开始输出
for(i=;i<;i++) //遍历10次
{
for(j=;j<;j++)
{
for(k=;k<ind_arr[j];k++)
{
if(i==get_ten(R[arr[j][k]]))
printf("%d ",R[arr[j][k]]); } } }
return ;
}
可以用图表示上面的排序,跟前几篇的桶排序有相似的地方:
最上层的是arr数组的列索引,最左侧是arr数组的行索引,最右侧的是每行存储了多少个数,也就是ind_arr的值。
有黑色边框的表格里面的值的x:xx ,x代表数组R中的索引值,xx则是R[x]。
然后我们从头开始按顺序遍历10次(说遍历有点牵强,应该说遍历arr数组内值不为0的),
每次取十位数值与遍历号相同的值输出。
此方法效率巨低。
那么我们可以考虑用空间换时间的方法。
//遍历,整个数组然后从十位数最小的开始输出
for(j=;j<;j++)
{
for(k=;k<ind_arr[j];k++)
{
//一共10个队列queue[x]
queue[get_ten(R[arr[j][k]])].enQueue(R[arr[j][k]]); }
}
我们一开始就可以用到这10个队列。很多书上有,不在此赘述。
快速排序&基数排序的更多相关文章
- 学习笔记三:基础篇Linux基础
Linux基础 直接选择排序>快速排序>基数排序>归并排序 >堆排序>Shell排序>冒泡排序=冒泡排序2 =直接插入排序 一.Linux磁盘分区表示 Linux中 ...
- 浅谈C++之冒泡排序、希尔排序、快速排序、插入排序、堆排序、基数排序性能对比分析之后续补充说明(有图有真相)
如果你觉得我的有些话有点唐突,你不理解可以想看看前一篇<C++之冒泡排序.希尔排序.快速排序.插入排序.堆排序.基数排序性能对比分析>. 这几天闲着没事就写了一篇<C++之冒泡排序. ...
- 牛客网Java刷题知识点之插入排序(直接插入排序和希尔排序)、选择排序(直接选择排序和堆排序)、冒泡排序、快速排序、归并排序和基数排序(博主推荐)
不多说,直接上干货! 插入排序包括直接插入排序.希尔排序. 1.直接插入排序: 如何写成代码: 首先设定插入次数,即循环次数,for(int i=1;i<length;i++),1个数的那次不用 ...
- swift冒泡排序,swift快速排序,swift归并排序,swift插入排序,swift基数排序
import UIKit /// 冒泡 /// ///时O(n2),空O(1) 稳定排序 func Mysort(arr:[Int]) -> [Int]{ var transArr = arr ...
- Python八大算法的实现,插入排序、希尔排序、冒泡排序、快速排序、直接选择排序、堆排序、归并排序、基数排序。
Python八大算法的实现,插入排序.希尔排序.冒泡排序.快速排序.直接选择排序.堆排序.归并排序.基数排序. 1.插入排序 描述 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得 ...
- Python实现八大排序(基数排序、归并排序、堆排序、简单选择排序、直接插入排序、希尔排序、快速排序、冒泡排序)
目录 八大排序 基数排序 归并排序 堆排序 简单选择排序 直接插入排序 希尔排序 快速排序 冒泡排序 时间测试 八大排序 大概了解了一下八大排序,发现排序方法的难易程度相差很多,相应的,他们计算同一列 ...
- 9, java数据结构和算法: 直接插入排序, 希尔排序, 简单选择排序, 堆排序, 冒泡排序,快速排序, 归并排序, 基数排序的分析和代码实现
内部排序: 就是使用内存空间来排序 外部排序: 就是数据量很大,需要借助外部存储(文件)来排序. 直接上代码: package com.lvcai; public class Sort { publi ...
- 算法与数据结构(十六) 快速排序(Swift 3.0版)
上篇博客我们主要聊了比较高效的归并排序算法,本篇博客我们就来介绍另一种高效的排序算法:快速排序.快速排序的思想与归并排序类似,都是采用分而治之的方式进行排序的.快速排序的思想主要是取出无序序列中第一个 ...
- 基数排序 java 实现
基数排序 java 实现 Wikipedia: Radix sort geeksforgeeks: Radix sort 数学之美番外篇:快排为什么那样快 Java排序算法总结(八):基数排序 排序八 ...
随机推荐
- UVA - 1513 Movie collection (树状数组)
题意:有n个影碟,标号为1~n,位置为0~n-1,每次取出一个影碟看完后,将其放在最前面(标号为0处),问每个影碟取出前,其位置之前有多少个影碟. 分析: 1.数组大小开为100000*2,后1000 ...
- 用JS改变embed标签的src属性
思路: A.先隐藏embed标签 B.清除embed元素 C.为embed重新赋值,加入Html页面中 1.html代码 <object id="forfun" classi ...
- java简写名词解释
RPC(Remote Procedure Call)—远程过程调用 实时编译器(Just In Time Compiler,JIT) XML 指可扩展标记语言(EXtensible Markup La ...
- JQuery 多属性选择节点
JQuery 1.6.0+以后用prop()代替attr(); 多属性选择节点 $("input[type=checkbox][name='first2'][value='first4']& ...
- Bulma CSS - CSS类
Bulma CSS框架教程 Bulma CSS – 简介 Bulma CSS – 开始 Bulma CSS – CSS类 Bulma CSS – 模块化 Bulma CSS – 响应式 Bulma是一 ...
- phpstudy后门复现(9.29第十五天)
本人转自:https://www.cnblogs.com/yuanshu/p/11613796.html 一.漏洞位置 程序自带的PHP的php_xmlrpc.dll模块中有隐藏后门,受影响的版本有p ...
- Java算法练习——正则表达式匹配
题目链接 题目描述 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符 '*' 匹配零个或多个前面的那一个元素 所谓匹配,是要 ...
- java登录以及连接数据库的温习
学完一部分android相关知识点后,为了下周的java测试,我还是反回来重新的学习了上学期的知识点java,在今天打开eclipse之后,对于自己之前自己所写过的东西还有连接数据库的内容,已经有所忘 ...
- 18 —— node 热部署工具 — supervisor /nodemon 。
1,全局安装: npm install -g supervisor 2,使用: —————————————————————————————— nodemon 和 supervisor 流程一致.
- Linux下MSSQL部署
目前主要使用的red hat系列的linux版本,CentoS 7.X,MSSQL2017 微软官方说明地址:https://docs.microsoft.com/zh-cn/sql/linux/qu ...