C语言 程序多次运行后,速度变慢的问题!My guess would be you are adding while loops when you press B.
From what I understand, you are not using any heap memory, cuz there is no new or malloc being called.
The size of a stack is usually 1M under Visual Studio by default, it canbe changed somewhere in the project property, and it is where you declare variables e.g
int x[10]; char c;
If you declare int x[1024*1024], which is 4MB under a 32bit system, it runs out the stack memory and results in an error, e.g. "Program stops working" and stuff.
If you want to prevent this from happening, you should actually use new or malloc cuz it gives you sufficient space on both physic memory and virtual memory on which you would never run out.
Above is just a brief explanation about stack and heap.
Can you please upload the code, especially for the part that responds to "B", otherwise it would be purely guessing and wouldn't be helpful at all.
数据结构(c语言)中快速排序什么时候排序最慢,什么情况下使用快速排序?当待排序的序列已经有序(不管是升序还是降序),此时快速排序最慢,一般当数据量很大的时候,用快速排序比较好,为了避免原来的序列有序,一般采用改进的快速排序算法,在排序之前随机交换两个元素的位置,就可以达到目的了,有一本书 , 叫《算法设计、分析与实现:C、C和java》徐子珊著 。可以看看,里面写了很多基本的算法
C语言,产生不相同的随机数过程怎么这么慢?算法不好 。简单的办法就是先生成,最后判断一下是否重复就可以了 。
但更重要的是你也不必要更不应该每次产生随机数时都用srand()函数,只要在程序最开始时用一次就可以了,否则反而变得很不随机 。
简单的解决办法就是把srand()语句挪到main()函数的开头 。
伪随机数的产生原理,其实就是以某个整数为初值,用一个算式不断地迭代运算(rand()函数内部会记下上一次运算的结果) 。而srand()就是指定这个初值 。
通常我们用srand(time(NULL));语句,就是用当前时间(单位是秒)给rand()的运算设初值,但由于你每次都用这句,所以当时间相同时,运算出来的伪随机数就是相同的 。
而由于time()函数的单位是秒,所以程序就一直循环,直到过了大约1秒钟,两次srand(time(NULL));设的初始数字不同时,才可能找到下一个数,而且这个数还是不够随机的 。如此一来,你每产生一个新数的时间至少要1秒钟,自然7个数要10秒钟也就很正常了 。
你可以在网上找一下rand()函数的具体实现,这对你理解它的运行机理可能会有好处 。
这是rand()和srand()在VC中的实现!
staticlongholdrand=1L;
/***
*voidsrand(seed)-seedtherandomnumbergenerator
【为什么c语言排序函数很慢 c语言中排序函数】*
*Purpose:
*Seedstherandomnumbergeneratorwiththeintgiven.Adaptedfromthe
*BASICrandomnumbergenerator.
*
*Entry:
*unsignedseed-seedtoseedrand#generatorwith
*
*Exit:
*None.
*
*Exceptions:
*
*******************************************************************************/
void__cdeclsrand(
unsignedintseed
)
{
holdrand=(long)seed;
}
/***
*intrand()-returnsarandomnumber
*
*Purpose:
*returnsapseudo-randomnumber0through32767.
*
*Entry:
*None.
*
*Exit:
*Returnsapseudo-randomnumber0through32767.
*
*Exceptions:
*
*******************************************************************************/
int__cdeclrand(
void
)
{
return(((holdrand=holdrand*214013L2531011L)16)0x7fff);
}
C语言快速排序算法问题快速排序法”使用为什么c语言排序函数很慢的是递归原理,下面我结合一个例子来说明“快速排序法”为什么c语言排序函数很慢的原理 。首先给出一个数组{53,12 , 98,63,18 , 72,80,46 , 32,21},先找到第一个数--53,把它作为中间值 , 也就是说,要把53放在一个位置,使得它左边为什么c语言排序函数很慢的值比它小 , 右边的值比它大 。{21,12,32 , 46,18,53,80,72,63 , 98},这样一个数组的排序就变成为什么c语言排序函数很慢了两个小数组的排序--53左边的数组和53右边的数组,而这两个数组继续用同样的方式继续下去,一直到顺序完全正确 。
一般来说,冒泡法是程序员最先接触的排序方法,它的优点是原理简单,编程实现容易,但它的缺点就是--程序的大忌--速度太慢 。
附上快速排序代码为什么c语言排序函数很慢:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#includestdio.h
void quicksort(int a[],int left,int right)
{
int i,j,temp;
i=left;
j=right;
temp=a[left];
if(leftright)
return;
while(i!=j)
{
while(a[j]=tempji)
j--;
if(ji)
a[i]=a[j];
while(a[i]=tempji)
i;
if(ji)
a[j--]=a[i];
}
a[i]=temp;
quicksort(a,left,i-1);
quicksort(a,i 1,right);
}
void main()
{
int a[]={53,12,98,63,18,72,80,46,32,21};
int i;
quicksort(a,0,9);
/*排好序的结果*/
for(i=0;i10;i)
printf("M\n",a[i]);
}
C语言选择排序法不稳定会出现什么状况?其实 去掉K,就变成了冒泡排序,选择排序是对冒泡排序的改良 。效率更高,当然所要排序的数不多的时候看不出效率的差别 。
假设从A[1]到A[10]进行排序 。冒泡算法 , 每次比较如果发现较小的元素在后面,就交换两个相邻的元素 。而选择排序算法的改进在于:先并不急于调换位置,先从A[1]开始逐个检查,看哪个数最小就记下该数所在的位置P,等一躺扫描完毕 , 再把A[P]和A[1]对调,这时A[1]到A[10]中最小的数据就换到了最前面的位置 。
所以 , 选择排序每扫描一遍数组,只需要一次真正的交换,而冒泡可能需要很多次 。
C语言数列如何加速太慢#include stdio.h
unsigned int Fibonacci(int n);
int main(void) {
int n;
while (scanf ("%d", n), n0) {
printf("\u\n",Fibonacci(n));
}
return 0;
}
unsigned int Fibonacci(int n) {
if (n = 0) return 0;
if (n == 1 || n == 2) return 1;
else {
int a[2] = {1, 1}, i = 3;
while (i = n) {
a[i % 2] = a[i % 2]a[(i - 1) % 2];
i;
}
return a[(i - 1) % 2];
}
}
其实这不需要递归,稍微变一下算法就行了 。另外,你的printf里的格式字符串错了 , 应该是"\u"而不是"%d" 。
为什么c语言排序函数很慢的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c语言中排序函数、为什么c语言排序函数很慢的信息别忘了在本站进行查找喔 。
推荐阅读
- 视频号怎么和主播合作,视频号怎么和主播连麦
- 如何运营新媒体讲座心得,如何运营新媒体讲座心得体会
- 租海外服务器一个月多少钱,租国外服务器一个月多少钱
- 精彩录屏直播最新,录屏直播平台
- linux命令行执行日志 linux系统日志
- 关于磁力下载搜索的信息
- 打开pdf如何重命名,pdf重新命名
- c语言div函数 c语言中divide什么意思
- wordpress全静态搜索,WordPress登录之后怎么搜索