快速排序&基数排序
2024-09-05 16:27:33
//快速排序
#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个队列。很多书上有,不在此赘述。
最新文章
- Ubuntu install JDK适合像我的小白
- nodejs 中自定义事件
- jq实现点击弹出框代码
- CSS3属性transition
- NtpClient
- [ES6] 20. Polyfills
- c#中的数据类型简介(枚举)
- Mac中如何写NTFS的移动硬盘
- 队列 <;queue>;
- adb shell screenrecord命令行使用说明
- 开源小程序CMS网站, JeeWx-App-CMS 1.1 版本升级发布,持续更新!
- SSIS 包部署错误 0xC0010014
- Luogu P2852 [USACO06DEC]牛奶模式Milk Patterns
- OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000083e80000, 1366294528, 0) failed;
- python之实现ftp上传下载代码(含错误处理)
- elasticsearch学习笔记--原理介绍
- ubuntu下如何查看软件安装目录以及安装版本
- windows installer服务无法启动,无法打开任何msi文件
- PostgreSQL设置事务隔离级别实验
- Linux centos下php安装cphalcon扩展的方法
热门文章
- 51nod 1423:最大二“货”
- 官网英文版学习——RabbitMQ学习笔记(五)Publish/Subscribe
- SpringMVC原理及流程解析
- javascript中window.open()与window.location.href
- 一百一十四、SAP查看事务代码对应工程源码
- 自定义jqGrid编辑功能,当行获取焦点时编辑,失去焦点时保存
- C#的listview
- HDU 5480:Conturbatio 前缀和
- POJ 1408:Fishnet
- BGP(IBGP“内部路由器”和EBGP“外部路由器”)命令解析