计算机算法中有几种常用的循环结构

计算机算法中有几种常用的循环结构,第1张

1.冒旅卜泡排序:时间复杂度为O(n * n)

NSArray *array

int i ,j

for(i = 0, i <array.count -1, i++)

{

for( j = i , j <array.count -1,j++){

if(array[i] >array[j]){

int temp = array[i]

array[i] = array[j]

array[j] = temp

}

}

}

2.二分查找(折半查找),时间复杂度为o(log n )

int search(int array[], int low, int high, int target)

{

if (low >high) return -1//第一次,low为0,high为数组的个数。这是用递归实现的。

int mid = (low + high)/2

if (array[mid]>target)

returnsearch(array, low, mid -1, target)

if (array[mid]<target)

returnsearch(array, mid+1, high, target)

//if (midValue == target)

return mid

}3.单链表反转

使用3个指针遍历单链表,逐个链接点进行反转。

ActList* ReverseList2(ActList* head)

{

//ActList* temp=new ActList

if(NULL==head|| NULL==head->next) return head //少于两个节点没有反转的必要。

ActList* p

ActList* q

ActList* r

p = head

q = head->next

head->next = NULL//旧的头指针是新的尾指针,next需要指向NULL

while(q){

r = q->next//先保留下一个step要处理的指针

q->next = p//然后p q交替工作进行反向

p = q

q = r

}

head=p// 最后q必然指向NULL,所以返回了p作为新的头指针

return head

}

4.判断一个链表是否为循环链表

判断一个单向链表是否是循环链表比较简单,只要将拆轮穗一个指针p指向表的第一个节点,而另外一个指针q指向

p的下一个节点,然后让q向后滑动,直到q为0或q等于p(此时表是循环链表)为止。

5.判断一个单链表桐搭是否存在环

设置两个指针(fast, slow),初始值都指向头,slow每次前进一步,fast每次前进二步,如果链表存在环,则fast必定先进入环,而slow后进入环,两个指针必定相遇。(当然,fast先行头到尾部为NULL,则为无环链表)程序如下:

bool IsExitsLoop(slist *head)

{

slist *slow = head, *fast = head

while ( fast &&fast->next )

{

slow = slow->next

fast = fast->next->next

if ( slow == fast ) break

}

return !(fast == NULL || fast->next == NULL)

}

常见就三种:for循环,while循环,do…while循环

当然桥租雹,也可以用goto做伪循环

还有用函数实现循环:

单一函数敏帆调用自己实现的循环叫做:递归型则函数,

两个或者多个函数首尾互相调用可以实现循环算法。

#include <stdio.h>

#include <conio.h>

int main()

{

long i

long n=100000000

for (i=0i<ni++)

printf("%08ld\n",i)

getch()

return 0

}

代码会运行相当慢。主要是输出到屏幕比较慢。

你橘源可以输出到文件,不过输出到文件,文件也会衫冲有800M左右。

你可以减小n到6位或伍歼。相应改一下printf中的08为06,它的时间是可以接受的。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12465887.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存