【发布时间】:2015-02-22 13:18:38
【问题描述】:
我编写了一个代码,它按排序顺序将新的随机数添加到链表中。看起来它工作正常,但与我看到的不同。
你能不能从内存消耗的角度看一下,说效率好不好?
我还听说如果使用指向当前数字位置的指针(指向位置指针的指针)对列表进行排序,那么它会 成为最有效的算法。是这样吗?
void add (num*&head, int size) {
num*temp = head;
num*prev = 0;
num*first = head;
int n;
int min = 0;
for (int i = 0; i<size; i++){
num*node = new num;
node->n = rand()%100;
cout << node->n << endl;
if (head!=0) {
if (prev != 0) {
if (node->n < head->n){
if (node->n < first->n) {
node->next = 0;
first->next = node;
first = node;
}
else {
temp = head;
while (temp->next != 0)
{
if (node->n <= temp->n && node->n >= temp->next->n) {
node->next = temp->next;
temp->next = node;
temp = head;
break;
}
else {
temp = temp->next;
}}}}
else
{
node->next = head;
head = node;
temp = head;
}}
else {
if (node->n < temp->n){
node->next = 0;
temp->next = node;
prev = node;
first = prev;
}
else {
node->next = head;
head = node;
prev = node->next;
first = prev;
}}}
else {
node->next = head;
head = node;
temp = head;
first = head;
}}}
【问题讨论】:
-
高效究竟是什么意思?占用空间、性能、内存消耗?
-
是的,感谢您的评论 - 内存消耗
-
为了节省时间,让我们用文字来描述你的算法:你有一个排序列表,并定义了操作 insert(x),它为新元素 x 找到正确的位置(从开始的 intil它找到了正确的位置)并把它放在那里,是这样吗?