//快速排序
#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. Ubuntu install JDK适合像我的小白
  2. nodejs 中自定义事件
  3. jq实现点击弹出框代码
  4. CSS3属性transition
  5. NtpClient
  6. [ES6] 20. Polyfills
  7. c#中的数据类型简介(枚举)
  8. Mac中如何写NTFS的移动硬盘
  9. 队列 &lt;queue&gt;
  10. adb shell screenrecord命令行使用说明
  11. 开源小程序CMS网站, JeeWx-App-CMS 1.1 版本升级发布,持续更新!
  12. SSIS 包部署错误 0xC0010014
  13. Luogu P2852 [USACO06DEC]牛奶模式Milk Patterns
  14. OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000083e80000, 1366294528, 0) failed;
  15. python之实现ftp上传下载代码(含错误处理)
  16. elasticsearch学习笔记--原理介绍
  17. ubuntu下如何查看软件安装目录以及安装版本
  18. windows installer服务无法启动,无法打开任何msi文件
  19. PostgreSQL设置事务隔离级别实验
  20. Linux centos下php安装cphalcon扩展的方法

热门文章

  1. 51nod 1423:最大二“货”
  2. 官网英文版学习——RabbitMQ学习笔记(五)Publish/Subscribe
  3. SpringMVC原理及流程解析
  4. javascript中window.open()与window.location.href
  5. 一百一十四、SAP查看事务代码对应工程源码
  6. 自定义jqGrid编辑功能,当行获取焦点时编辑,失去焦点时保存
  7. C#的listview
  8. HDU 5480:Conturbatio 前缀和
  9. POJ 1408:Fishnet
  10. BGP(IBGP“内部路由器”和EBGP“外部路由器”)命令解析