zoukankan      html  css  js  c++  java
  • 《数据结构与算法分析》之选择问题

    《数据结构与算法分析》之选择问题

    注:《数据结构与算法分析》第一章课后练习题一

    问题描述

    设有一组N个数而确定其中的第k个最大者,称这种问题为选择问题。令k=N/2,编程解决选择问题,并且画出表格显示程序对于不同的N值得运行时间。
    (1)选择问题的解决:常规思路,排序后,取第k个数即可。书中后面会有更好的解决办法。
    (2)程序运行的时间:time.h头文件中,利用两个变量分别读取两个时间,做差即可得到函数运行时间。
    (3)不同的N,需要不同长度的数组,动态内存分配,注意需要及时调用free()函数释放内存。

    程序实现

    (1)solution()为选择问题解决办法的子函数,调整程序中的变量multiple可以调整数组大小。
    (2)malloc动态分配数组:

    array_one = (int *)malloc(i*multiple*sizeof(int));      //Dynamic memory allocation
    for(j=0;j<multiple*i;j++) array_one[j]=rand();  
    ......
    free(array_one);
    

    (3)程序运行时间:

    //头文件<time.h>  
    int main(void )
    {
       clock_t start, finish;    
       double  duration;   
       start = clock();  
       .......
       finish = clock();  
       duration = (double)(finish - start) / CLOCKS_PER_SEC;	
    

    (4)完整程序:

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    int solution(int *array,int k);
    //choice solution: select the kth bigger numer in the arrar
    int main(void )
    {
       clock_t start, finish;  
       double  duration;   
       int i,j,middle_num;
       for(i=1;i<=10;i++)
       {
    		int *array_one,multiple=1000;
    		array_one = (int *)malloc(i*multiple*sizeof(int));      //Dynamic memory allocation
    		for(j=0;j<multiple*i;j++) array_one[j]=rand();
    		start = clock();  
    		middle_num = solution(array_one,multiple*i);
    	    finish = clock();  
    		duration = (double)(finish - start) / CLOCKS_PER_SEC;
    		printf("________________________________________");
    		printf( "
    
    when k is %d, time is %f seconds
    ", i*multiple,duration );  
    		free(array_one);
       }
       system("pause");  
    }
    int solution(int *array,int length)     //select the middle num of array
    {
    	  int i,j,temp;
    	  for(i=0;i<length;i++)              //
    		  for(j=i+1;j<length;j++)
    		  {
    			if(array[i]>array[j])
    				temp = array[i];
    				array[i]=array[j];
    				array[j]=array[i];
    		  }  
    	return  array[length/2];
    }
    
    

    运行结果

  • 相关阅读:
    Eureka Server的多级缓存和过期机制
    eureka-client拉取注册表
    Ribbon的调用流程
    EurekaServer启动
    eureka的注册
    Eureka的客户端是怎么启动的?
    Ribbon的负载均衡源码
    Ribbon是怎么重构URL的?
    Maven添加本地jar
    window 常用软件记录
  • 原文地址:https://www.cnblogs.com/HZL2017/p/6985316.html
Copyright © 2011-2022 走看看