c语言 快速排序 和 二分 查找 模型

原创 2015年07月10日 11:37:51

引言:

c语言中   stdlib   自定义了一个 qsort 快速排序函数

     模型:

int cmp(const void *a,const void *b);

qsort(s,n,sizeof(s[0]),cmp);

示例代码:

//
#include<stdio.h>
#include<stdlib.h>

int cmp(const void* a, const void* b)
{
    return  *((int*)a) - *((int*)b);
}

//浜屽垎鏌ユ壘绠楁硶
int search(int* arr, int arr_len, int value)
{
   int  index = 0;
   int  min = 0;
   int  max = arr_len -1;
   int  middle = 0;
   if(arr[min] == value)
        return min;
   else if (arr[max] == value)
        return max;

   while(min < max)
   {
      middle = (min + max)/2;
      if(arr[middle] > value)
           max = middle -1;
      else if(arr[middle] < value)
	   min = middle + 1;
      else 
	   return middle;
   }

}

int main()
{
    int a[] = {5,4,1,3,10,6,22,98,76,35};
     qsort(a, sizeof(a)/sizeof(int), sizeof(int), cmp);
    int i =0;
    for(i; i< sizeof(a)/sizeof(int); i++)
     printf(" %2d, ", a[i]);
    printf(" \n");

    int  index = search(a, sizeof(a)/sizeof(int), 35);
    printf("index=%d, num=%d\n", index, a[index]);
}
//结构体的 快速排序

#include<stdio.h>
#include<string.h>

typedef unsigned int uint32_t;
typedef char         uint8_t;
typedef unsigned short uint16_t;

typedef struct _BOOK{
        char name[32];
        int price;

}Book;


typedef struct _YOUXI{
  int num;
  Book book[4];
}YouXi;

int   cmp(void* a, void* b)
{
    return ((YouXi*)a)->num - ((YouXi*)b)->num;
}

int  main()
{

        YouXi  you[4] = {{1,{"luchenfei", 32}}, {4,{"chunchun", 37}}, {3,{"lili", 39}}, {2,{"mingming", 34}}};
        int i =0;
        for(i; i<4 ;i++)
        {
                printf("num=%d, name=%s, price=%d\n", you[i].num, you[i].book->name, you[i].book->price);
        }
#if 1
        qsort(you, 4, sizeof(YouXi), cmp);

        i =0;
        for(i; i<4 ;i++)
        {
                printf("num=%d, name=%s, price=%d\n", you[i].num, you[i].book->name, you[i].book->price);
        }
#endif
}


结束语:

二分查找 + 快速 排序   在 具体应用时候 还是很不错一个 算法, 比如 解析 地理信息库, ip段 和 地址的映射 关系, 用ip 的开始ip 快排, 然后在 用二分  去查找。。


:关于 qsort c语言的 不同类型 double, 结构体 , 字符串 排序 参见博客:  http://blog.sina.com.cn/s/blog_5155e8d401009145.html

C语言实现直接插入排序,冒泡排序以及二分查找(巩固理解记忆)

C语言实现直接插入排序,冒泡排序以及二分查找(巩固理解记忆)
  • u013871100
  • u013871100
  • 2015年08月18日 20:58
  • 1196

二分查找、快速排序对比和详解

**二分查找和快速排序(binarySearch)&&(quickSort)** 这两个都是用到分治的思想很容易搞混。而且即使binarySearch是用到分治到不一定意味着递归可以通过循环实现。而且...
  • qhrqhrqhr
  • qhrqhrqhr
  • 2016年03月24日 22:19
  • 2484

快速排序和二分查找时间复杂度详解

因为二分查找每次排除掉一半的不适合值,所以对于n个元素的情况:一次二分剩下:n/2两次二分剩下:n/2/2 = n/4。。。m次二分剩下:n/(2^m)在最坏情况下是在排除到只剩下最后一个值之后得到结...
  • ZhikangFu
  • ZhikangFu
  • 2016年04月27日 10:52
  • 4201

C语言之二分查找

二分查找算法,说白了就是在有序的数组里面给予一个存在数组里面的值Q,然后用将其先和数组中间的比较,如果Q大于中间值,则进行下一次mid后面的比较,直到找到相等的,就可以得到他的位置。  示例代码如...
  • u014136713
  • u014136713
  • 2016年03月13日 19:21
  • 1729

用C语言实现二分查找算法

二分查找算法思想非常简单,就是折半查找一个有序序列,在这里,我用二分查找一个顺序排列的整形数组。若用C实现的话我们需要注意以下几个方面:    1.如何判断查找完成,定义返回值含义,定义退出循环条件 ...
  • pawnsir
  • pawnsir
  • 2016年05月28日 18:35
  • 4299

【C/C++】折半查找(二分查找)

一、二分查找 在C和C++里,二分查找是针对有序数组所用的一种快速查找元素的方法。 二、二分查找的条件以及优缺点 条件:针对有序数组(元素从小到大或从大到小) 优点:查询速度较快,时间复杂度为O(n)...
  • qq_31828515
  • qq_31828515
  • 2016年06月30日 17:34
  • 13848

使用c语言指针和递归方法实现二分查找

使用c语言指针和递归方法实现二分查找,符输入语句与打印语句。 #include //binary search init int binsearch(int low, int height, in...
  • agangdi
  • agangdi
  • 2014年04月02日 21:48
  • 2482

分治法在归并排序和快速排序中的应用

归并排序 归并排序和快速排序都使用了“分治”策略(divide-and-conquer)。对于数组A[p..r],归并排序先把数组从中间分开,形成两个具有(p+r)/2个元素的子数组(divide)...
  • qtyl1988
  • qtyl1988
  • 2016年05月22日 23:15
  • 439

C语言二分查找法(指针和数组实现)

/* * 编写一个函数,对一个已排序的整数表执行二分查找。 * 函数的输入包括各异指向表头的指针,表中的元素个数,以及待查找的数值。 * 函数的输出时一个指向满足查找要求的元素的指针,当未查找到...
  • toto1297488504
  • toto1297488504
  • 2014年07月25日 23:20
  • 1188

【二分查找】用C语言实现一个有序数组的二分查找

什么是二分查找?首先,二分查找也叫折半查找,它是对于一组有序(升序或降序)数列来说的,我们举例子说明这个思想。 例如:猜数字游戏 随机给出1-100内的一个数字,请猜出这个数字 那我们不能随机没...
  • weixin_36820871
  • weixin_36820871
  • 2017年04月12日 19:49
  • 1373
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c语言 快速排序 和 二分 查找 模型
举报原因:
原因补充:

(最多只允许输入30个字)