Chinaunix首页 | 论坛 | 博客
  • 博客访问: 459390
  • 博文数量: 62
  • 博客积分: 1742
  • 博客等级: 中尉
  • 技术积分: 859
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-06 00:13
个人简介

这是一句很长很长而且又很啰嗦并且很无聊的废话...

文章分类

全部博文(62)

文章存档

2013年(1)

2012年(13)

2011年(48)

分类: C/C++

2011-06-01 21:50:36

     首先我承认我算法那部分是真的很烂,但是经典常用的还是有必要记一记的.
 
     折半查找法,需要在有序的集合中才起作用.其核心是,每次获取折半中元素,对比,大于小于,继续折半...一直到折半值等于要查找的元素.贴下代码:
  1. #include <stdio.h>

  2. int main(){
  3.     int fbnqq[]={0, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610};

  4.     int i=0,n;
  5.     scanf("%d",&n);
  6.     getchar();

  7.     int head = 0, tail = sizeof(fbnqq)/sizeof(int)-1, mid = (head + tail) / 2;
  8.     while(head <= tail){
  9.         if(fbnqq[mid] == n){
  10.             printf("find num in index:%d\n", mid);
  11.             break;
  12.         }
  13.         if(n < fbnqq[mid])
  14.             tail = mid - 1;
  15.         else
  16.             head = mid + 1;
  17.         if(head > tail)
  18.             printf("num not found! %d-%d\n",head > mid ? fbnqq[mid] : fbnqq[mid-1], head > mid ? fbnqq[mid+1] : fbnqq[mid]);
  19.         mid = (head + tail) / 2;
  20.     }
  21.     return 0;
  22. }

       

      快速排序,其核心是分而治之,选头尾和枢纽元,然后就在枢纽元两边交换,效果像这样 head | pivot | tarl ,然后递归下去,返回条件是头小于尾即可.贴下代码:

  1. #include <stdio.h>
  2. #include <time.h>

  3. void QuickSort(int array[],int head,int tarl);

  4. int main(int argc,char **argv){
  5.     int array[1000];

  6.     srand((unsigned)time(NULL));
  7.     int j=1000;
  8.     while(j--)
  9.         array[j] = rand() % 1000;

  10.     QuickSort(array, 0, sizeof(array) / sizeof(int) -1);
  11.     
  12.     int *i = array;
  13.     while(i != (int *)(&array + 1))
  14.         printf("%d->", (i++)[0]);
  15.     printf("\n");
  16.     return 0;
  17. }

  18. void QuickSort(int array[],int head,int tarl){
  19.     if (head < tarl){
  20.         int pivot = (head + tarl) / 2;
  21.         int tmp_head = head, tmp_tarl = tarl;
  22.         while(tmp_head < tmp_tarl){
  23.             while((tmp_head < pivot) && (array[tmp_head] <= array[pivot]))
  24.                 tmp_head++;
  25.             while((tmp_tarl > pivot) && (array[tmp_tarl] >= array[pivot]))
  26.                 tmp_tarl--;
  27.             if(tmp_head == pivot)
  28.                 pivot = tmp_tarl;
  29.             else if(tmp_tarl == pivot)
  30.                 pivot = tmp_head;
  31.             int tmp_value = array[tmp_head];
  32.             array[tmp_head] = array[tmp_tarl];
  33.             array[tmp_tarl] = tmp_value;
  34.         }
  35.         QuickSort(array, head, pivot - 1);
  36.         QuickSort(array, pivot + 1, tarl);
  37.     }
  38. }
阅读(4030) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~