//快速排序
#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个队列。很多书上有,不在此赘述。

快速排序&基数排序的更多相关文章

  1. 学习笔记三:基础篇Linux基础

    Linux基础 直接选择排序>快速排序>基数排序>归并排序 >堆排序>Shell排序>冒泡排序=冒泡排序2 =直接插入排序 一.Linux磁盘分区表示 Linux中 ...

  2. 浅谈C++之冒泡排序、希尔排序、快速排序、插入排序、堆排序、基数排序性能对比分析之后续补充说明(有图有真相)

    如果你觉得我的有些话有点唐突,你不理解可以想看看前一篇<C++之冒泡排序.希尔排序.快速排序.插入排序.堆排序.基数排序性能对比分析>. 这几天闲着没事就写了一篇<C++之冒泡排序. ...

  3. 牛客网Java刷题知识点之插入排序(直接插入排序和希尔排序)、选择排序(直接选择排序和堆排序)、冒泡排序、快速排序、归并排序和基数排序(博主推荐)

    不多说,直接上干货! 插入排序包括直接插入排序.希尔排序. 1.直接插入排序: 如何写成代码: 首先设定插入次数,即循环次数,for(int i=1;i<length;i++),1个数的那次不用 ...

  4. swift冒泡排序,swift快速排序,swift归并排序,swift插入排序,swift基数排序

    import UIKit /// 冒泡 /// ///时O(n2),空O(1) 稳定排序 func Mysort(arr:[Int]) -> [Int]{ var transArr = arr ...

  5. Python八大算法的实现,插入排序、希尔排序、冒泡排序、快速排序、直接选择排序、堆排序、归并排序、基数排序。

    Python八大算法的实现,插入排序.希尔排序.冒泡排序.快速排序.直接选择排序.堆排序.归并排序.基数排序. 1.插入排序 描述 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得 ...

  6. Python实现八大排序(基数排序、归并排序、堆排序、简单选择排序、直接插入排序、希尔排序、快速排序、冒泡排序)

    目录 八大排序 基数排序 归并排序 堆排序 简单选择排序 直接插入排序 希尔排序 快速排序 冒泡排序 时间测试 八大排序 大概了解了一下八大排序,发现排序方法的难易程度相差很多,相应的,他们计算同一列 ...

  7. 9, java数据结构和算法: 直接插入排序, 希尔排序, 简单选择排序, 堆排序, 冒泡排序,快速排序, 归并排序, 基数排序的分析和代码实现

    内部排序: 就是使用内存空间来排序 外部排序: 就是数据量很大,需要借助外部存储(文件)来排序. 直接上代码: package com.lvcai; public class Sort { publi ...

  8. 算法与数据结构(十六) 快速排序(Swift 3.0版)

    上篇博客我们主要聊了比较高效的归并排序算法,本篇博客我们就来介绍另一种高效的排序算法:快速排序.快速排序的思想与归并排序类似,都是采用分而治之的方式进行排序的.快速排序的思想主要是取出无序序列中第一个 ...

  9. 基数排序 java 实现

    基数排序 java 实现 Wikipedia: Radix sort geeksforgeeks: Radix sort 数学之美番外篇:快排为什么那样快 Java排序算法总结(八):基数排序 排序八 ...

随机推荐

  1. HihoCoder第十周:后序遍历

    也就在大二学数据结构的时候知道了树的前序遍历.后序遍历.中序遍历.之后就忘了,在之后就是大四研究生老师考我,我当时还不知道,真够丢人的.自此之后,知道了如何通过其中两个得到第三个,但是也没有编程实现过 ...

  2. Linux 下配置多路径及SCSI扫描磁盘重新发现大小

    Linux SCSI扫描磁盘重新发现大小: # for i in `find /sys/class/scsi_host/host*`; do echo 1 >> $i/issue_lip; ...

  3. VMware Workstation上新建虚拟机

    准备开始,话不多少,直接上图 点击创建新的虚拟机或者在文件上面选择新建虚拟机 点击完成就可以了 后面的步骤,是在公司电脑上完成的,新建了一个CentOs1,步骤同上,后面继续,然后需要更改配置,点击虚 ...

  4. node - 获取 token

     String(req.headers.authorization || '').split(' ').pop() 

  5. js generator的两个实际应用

    generator作为一个用来操作异步的状态机, 遇到yield停止, 通过调用next()来继续操作.  今天就用generator来举例两个实际开发中的应用. 1,抽奖 function draw ...

  6. LINUX——LVM逻辑卷管理

    LVM: logical volumes manager LVM逻辑卷部署 物理卷—>卷组—>逻辑卷 第一步:关机添加磁盘:两个磁盘可以构成一个磁盘组. 第二步:查看磁盘 # ls /de ...

  7. Erlang/Elixir精选-第5期(20200106)

    The forgotten ideas in computer science-Joe Armestrong 在2020年的第一期里面,一起回顾2018年Joe的 The forgotten idea ...

  8. python outline

    1.列表/数组/numpy/Pandas Python list 初始化技巧   (2018-12-27 11:54) python3 sort list   (2019-05-23 14:52) P ...

  9. 通过Navicat Premium 实现Oracle的连接和基本操作

    一.Oracle的连接 以下为Navicat Premium连接Oracle数据库的教程 一.需要准备的软件(下载适合自己系统的软件) 1.Navicat premium 官方下载地址:http:// ...

  10. python-模块安装

    首先到这个网址https://www.lfd.uci.edu/~gohlke/pythonlibs/ 找到自己想要用的模块,然后下载下来, 回到桌面找到文件所在位置进入cmd中, pip instal ...