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


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

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

    问题描述

    设有一组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];
    }
    
    

    运行结果

  • 相关阅读:
    c++中的length,strlen;静态数据成员,静态局部变量
    c++中*的含义
    (1)引用的解释; (2)类的成员函数在类外实现的情况
    DbFunctions 作为 LINQ to Entities 查询的一部分使用时,此方法调用规范 CreateDateTime EDM 函数以创建新的 DateTime 对象。
    年视图,选择月份 ---bootstrap datepicker
    时间控件,页面刷新初始化时间控件只显示年月
    load加载层
    response 下载文件火狐浏览器文件名乱码问题
    Web Uploader
    layer是一款近年来备受青睐的web弹层组件
  • 原文地址:https://www.cnblogs.com/HZL2017/p/6985316.html
Copyright © 2020-2023  润新知