在C中如果创建数组而没有指定大小会报错
int e[];
||=== Build file: "no target" in "no project" (compiler: unknown) ===|
E:\C_code\kuaisupaixu.cpp|11|error: storage size of 'e' isn't known|
要实现元素动态添加有什么方法?
使用STL,vector
这个效率怎么样,消耗资源多么
使用链表
如果需要数组的话,可以再转为数组
使用链表的话,可以很容易的将多个片段连接起来,但是使用连接时需要找到这一段链表的最后一个元素将他的指针指向要连接的元素,仅仅找片段中的最后一个元素就会消耗不少时间及资源
而且这种排序操作几乎打乱了所有指针的指向可能会出现问题,导致指针指向错误
如果是大规模的数组使用快速排序,由于链表的创建,销毁,指针的重新分配以及链表不可随机访问只能一个个访问的原因,也可能会抵消掉快速排序的效率
还是使用数组
(1) 一开始使用malloc,如果元素增加使用realloc,这个方法使用的是堆内存,而堆内存一般受限于虚拟内存,所以一般堆内存比较大,有比较多的空间,这种方法可以实现认为上的动态增加,的确通过再申请空间让人以为空间在增加,好像有更多的空间可以用,实际上也是,
不过问题一是在递归时,保存的映像中使用此操作是所有映像改变还是只影响当前状态
而且如果会有很多元素需要添加那么需要很多次realloc那么会不会消耗很多的资源,让数组在内存中移来移去
(2) 直接创建一个足够大的数组,使用一个位置指针用来代表这个数组用了多少空间,这样不用使用新的方法,还是使用数组,虽然使用了几个大数组,但是不需要再对数组进行什么改变,只需要在数组的不同位置变换元素数值即可
如何在C语言中实现传递数组?
方法有两种:值传递和地址传递(额 一看就差不多了)
值传递
说明和定义函数时,要在数组参数的尾部加上一对方括号([]),调用函数时只需将数组的地址(即数组名)传递给函数
在值传递方式中,数组将被复制一份,复制所得的数组将被存放在栈中
值传递方式的开销是非常大的,
因为首先复制原来数组就会占用额外的内存,
还会有代码去执行复制的操作,
这种操作又会需要比较多的时间,
资源,额外指令,时间都会有消耗,所以效率会比较低
地址传递
地址传递只需要传递个地址就行了,也就是个指针,
#在C/C++不能直接返回一个数组。这是由于在C/C++中,数组不是一种类型,因此不能被直接返回。
#定义了一个数组名之后,他就是常量了,不能再给数组赋值
Python实现
def quicksort(array):
if len(array) < 2:
return array
else:
pivot = array[0]
less = [i for i in array[1:] if i <= pivot]
greater = [i for i in array[1:] if i > pivot]
return quicksort(less) + [pivot] + quicksort(greater)
C/C++实现(有问题,再改)
#include <bits/stdc++.h>
using