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,它的时间是可以接受的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)