码迷,mamicode.com
首页 > 编程语言 > 详细

【数据结构与算法分析——C语言描述】练习1.1——选择问题

时间:2017-09-12 13:43:52      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:sof   产生   sel   元素   target   指针   apple   blank   height   

本部分内容来自http://www.cnblogs.com/mingc,笔者在此只用于整理学习。

 

问题描述:编写一个程序解决选择问题。令k=N/2。画出表格显示你的程序对于N为不同值时的运行时间。

理解:设有一组N个数确定其中第k个最大者,称选择问题(selection problem)

思路:读入前k个数到临时数组tmp(并按降序排列)。然后逐个读取后续数字X,当X大于第k个数时,将其加入数组tmp(并按降序排列)。最后返回位置k-1上的值 

 

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define N 100

int select(int* arr, int n, int k);

void main()
{
	int i, value;
	int* arr;
	clock_t elapse;

	srand((unsigned)time(NULL));
	arr = (int* )malloc(sizeof(int)* N);
	for(i = 0; i < N; i++)
	{
		arr[i] = rand() % 1000;  //产生的随机数限制在1000之内
		printf("%d ", arr[i]);
	}
	printf("\n");
	elapse = clock();
	value = select(arr, N, N/2);
	elapse = clock() - elapse;
	printf("Value: %d, elapsed: %.4lfs\n", value, (double)elapse/1000);
	system("pause");
}

int select(int* arr, int n, int k)
{
	int i, j, t;
	int* tmp;
	tmp = (int *)malloc(sizeof(int)* k);
	for(i = 0; i < k; i++)             //读入k个元素并升序排列
	{
		tmp[i] = arr[i];
		for(j = i; j > 0; j--)
		{
			if(tmp[j] < tmp[j-1])
			{
				t = tmp[j];
				tmp[j] = tmp[j-1];
				tmp[j-1] = t;
			}
		}
	}
	printf("读入k个元素并升序排列:\n");
	for(i = 0; i < k; i++)
	{
		printf("%d ",tmp[i]);
	}
	printf("\n");
	for(i = k; i<n; i++)                //加入新元素并升序排列
	{
		if(arr[i] > tmp[0])
		{
			tmp[0] = arr[i];
			for(j = 0; j < k-1; j++)
			{
				if(tmp[j] > tmp[j+1])
				{
					t = tmp[j];
					tmp[j] = tmp[j+1];
					tmp[j+1] = t;
				}
			}
		}
	}
	printf("加入新元素并升序排列:\n");
	for(i = 0; i < k; i++)
	{
		printf("%d ",tmp[i]);
	}
	printf("\n");
	return tmp[k-1];
}

笔记:

1.srand((unsigned)time(NULL));

初始化随机函数种子。srand((unsigned)time(NULL));是拿系统时间作为种子,由于时间是变化的,种子变化,可以产生不相同的随机数。

使用时,参数可以是unsigned型的任意数据,比如srand(10)。

如果不使用srand( ),用rand( )产生的随机数可能是一样的。

2.int* arr;

   arr = (int* )malloc(sizeof(int)* N);

使用指针来指向字符串时,必须为其开辟动态空间,否则在为其赋值时,会由于没有分配空间而提示错误。

也可以采用int arr[MAXSIZE];来直接定义数组空间。

【数据结构与算法分析——C语言描述】练习1.1——选择问题

标签:sof   产生   sel   元素   target   指针   apple   blank   height   

原文地址:http://www.cnblogs.com/li943838648/p/7509465.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!