zoukankan      html  css  js  c++  java
  • 基数排序算法

         基数排序思想:分配桶,把待排序的数字按照从低到高的顺序排列。主要有两个过程,分配和收集。

         分配时,根据数字的位数,从小到大存放到桶中。

         收集时,按照顺序,再覆盖原数组。

         重复分配和收集的过程,直到到数字的最高位。

          好长时间不写C++代码了。。。

         代码如下:

       

    #include <iostream>
    #include <cstdlib>
    
    using namespace std;
    
    int getNumInPos(int num,int k)
    {
    	int temp=1;
    	for(int i=1;i<k;i++)
    	{
    	     temp*=10;
    	}
    
    	return  (num/temp)%10;
    }
    
    void radix_sort(int arr[],int n,int k)
    {
    
    	int *radix_arr[10];
    	for(int i=0;i<n;i++)
    	{
    	    radix_arr[i]=(int *)malloc(sizeof(int)*(n+1));//分配桶
    	    radix_arr[i][0]=0;
    	}
    	
    	for(int j=1;j<=k;j++)
    	{
    		 int t;
    	    //分配数据分配到桶中
    	   	for(int i=0;i<n;i++)
    	      {
    	        int digit=getNumInPos(arr[i],j);
    	        int index=++radix_arr[digit][0];
    	        radix_arr[digit][index]=arr[i];
    	      }
    	      //从桶中收集数据
    	      for(int i=0,t=0;i<n;i++)
    	      {
    	          for( int m=1;m<=radix_arr[i][0];m++)
    	          {
    	               arr[t++]=radix_arr[i][m];
    	          }
    	          radix_arr[i][0]=0;
    	      }
    
    	}
    
    	
    
    }
    
    void print_arr(int arr[],int n)
    {
    	for(int i=0;i<n;i++)
    	   printf("%d,",arr[i]);
    	printf("
    ");
    }
    
    int main()
    {
    	int arr[10]={123,243,521,213,67,12,7,90,101,321};
    	printf("基数排序前:");
    	print_arr(arr,10);
    	radix_sort(arr,10,3);
    	printf("基数排序后:");
    	print_arr(arr,10);
    
    	return 0;
    
    }
    

      运行结果:

          

       

        

  • 相关阅读:
    什么叫套接字
    浅谈labviEW定时器
    C#线程篇---Task(任务)和线程池不得不说的秘密
    async与await详解
    异步编程与多线程的联系与区别
    什么是Task
    MVC模式的介绍(C#)
    Git指令
    Redis安装部署、Jedis的使用
    Oracle——序列、索引、同义词
  • 原文地址:https://www.cnblogs.com/xshang/p/3726590.html
Copyright © 2011-2022 走看看