zoukankan      html  css  js  c++  java
  • 算法导论第三版思考题8-2.e

     1 COUNTING-SORT2(A,k)        
     2     let C[0..k] be a new array
     3     for i = 0 to k
     4         C[i]=0
     5     for i = 1 to A.length
     6         C[A[i]] = C[A[i]]+1
     7     for i = 1 to k
     8         C[i] = C[i] + C[i-1]
     9     for i = A.length downto 1
    10         while i < (j = C[A[i])
    11             exchagnge A[i] with A[j]
    12             C[A[j]] = C[A[j]]-1
    #include <stdio.h>
    #include <stdlib.h>
    #include<time.h>
    #include <memory.h>
    
    void radix2(int* arr, int len, int k)
    {
    	k++;
    	int* count_arr = (int*)malloc(sizeof(int)*k);
    	for(int i = 0; i < k; i++)
    	{
    		count_arr[i] = 0;
    	}
    	for (int i = 0; i < len; i++)
    	{
    		count_arr[arr[i]]++;
    	}
    	for (int i = 1; i < k; i++)
    	{
    		count_arr[i] += count_arr[i-1];
    	}
    	for (int i = len-1; i >= 0; i--)
    	{
    		//a[i+1 ... len-1]的元素是已经确定最终位置的元素
    		//求出arr[i]中元素的最终位置为j,如果i<j,则swap(a[i],a[j]),
    		//继续寻找新arr[i]元素的最终位置,直到i>=j
    		int j = count_arr[arr[i]] - 1;
    		while (i < (j = count_arr[arr[i]] - 1))
    		{
    			int temp = arr[j];
    			arr[j] = arr[i];
    			arr[i] = temp;
    			count_arr[arr[j]]--;
    		}
    	}
    	free(count_arr);
    }
    
    int rand_int(int max)
    {
    	return (rand() % max);
    }
    
    void main()
    {
    	int a[100] = {0};
    	int max = 20;
    	srand(time(0));
    	for (int i = 0; i < 100; i++)
    	{
    		a[i] = rand_int(max);
    	}
    
    	radix2(a, 100, max);
    	for (int i = 0; i < 100; i++)
    	{
    		printf("%d ", a[i]);
    	}
    	getchar();
    }
    

      

  • 相关阅读:
    MySQL的备份
    Linux下MySQL安装及配置
    MySQL的优化
    MySQL的基本操作
    python文件操作练习之文件备份
    文件操作练习之统计目录大小
    SQLite
    PyMySQL模块
    python语法练习题之九九乘法表
    类装饰器
  • 原文地址:https://www.cnblogs.com/MrWrong/p/7125663.html
Copyright © 2011-2022 走看看