数据结构_4

一下是一些常用查找和排序算法的代码(c语言):

顺序查找

int sq_search(keytype key[], int n, keytype key)
{
    int i;
    for(i=0;i<n;i++)
       if(key[i] == key)   //查找成功
         return i;  //返回关键字在key[]中的下标
    return -1;  //查找失败
}

折半查找

int bin_search(keytype key[], int n, keytype k)
{
    int low = 0, high = n-1, mid;
    while(low<high)
    {
        mid = (low+high) / 2;
        if(key[mid] == k)
          return mid;       //查找成功,返回mid
        if(k > key[mid])    //在后半序列查找
          low = mid + 1;
        else                //在前半序列查找
          high = mid - 1;
    }
    return -1;              //查找失败,返回-1
} 

直接插入排序

void insertsort(keytype k[], int n)
{
    int i, j;
    keytype tmp;
    for(i=2;i<=n;i++)   //循环n-1次,执行n-1趟插入排序
    {
        tmp = k[i];     //将k[i]保存在临时变量tmp中
        j = i-1;
        while(j>0 && tmp<k[j]) //找到tmp的位置插入
           k[j+1] = k[j--];    //将k[j]后移,再将j-1
        k[j+1] = tmp;          //将元素tmp插入到指定位置,第i-1趟插入完成
    }
} 

选择排序

void selectsort(keytype k[], int n)
{
    int i, j, min;
    keytype tmp;
    for(i=1;i<=n-1;i++)
    {
        min = i;
        for(j=i+1;j<=n;j++) //在后n-i+1个元素中找到最小的元素
           if(k[j] < k[min])
              min = j;      //用min记录最小元素的位置
        if(min != j)        //如果最小的元素不位于后n-i+1个元素的下标
        {
           tmp = k[min];
           k[min] = k[i];   //元素的交换
           k[i] = tmp;
        }
    }
} 

冒泡排序(改进后的代码)

void bubblesort(keytype k[], int n)
{
    int i, j, tmp, flag = 1;
    for(i=1;i<=n-1 && flag == 1;i++)
    {   flag = 0;
       for(j=1;j<=n-i;j++)
       {  if(k[j]>k[j+1])
          {
              tmp = k[j+1];
              k[j+1] = k[j];
              k[j] = tmp;
              flag = 1;
          }
       }
    }
} 

希尔排序

void shellsort(keyype k[], int n)
{
    int i, j, flag, gap = n;
    keytype tmp;
    while(gap > 1)
    {
        gap = gap/2;  //缩小增量,每次减半
        do            //子序列运用冒泡排序,当然其他的也行
        {
            flag = 0;
            for(i=1;i<=n-gap;i++)
            {
                j = i + gap;
                if(k[i]>k[j])
                {
                    tmp = k[i];
                    k[i] = k[j];
                    k[j] = tmp;
                    flag = 1;
                }
            }
        }while(flag != 0)
    }
} 

快速排序

//快速排序
void quicksort(keytype k[], int s, int t)
{
    int i, j;
    if(s<t)
    {
        i = s;
        j = t + 1;
        while(1)
        {
            do i++;
            while(!(k[s]<=k[i] || i==t))
                do j--;
            while(!(k[s]>=k[j] || j==s))
            if(i<j)
              swap(k[i],k[j]);
            else
              break;
        }
        swap(k[s],k[j]);
        quick(k,s,j-1);
        quick(k,j+1,t);
    }
} 

时间: 2024-10-15 13:56:33

数据结构_4的相关文章

《数据结构》_4数组和字符串

数组 一维数组 下标为i(0≤i<n)的数组元素arrName[i]的存储地址loc(arrName[i])为 loc(arrName[i])=loc(arrName[0])+i*sizeof(ElemType)    (0≤i<n)    loc(arrName[0])被称为基地址 二维数组 数组元素arrName[i][j]的存储地址loc(arrName[i][j])为 loc(arrName[i][j])=loc(arrName[0][0])+(i*n+j)sizeof(ElemTyp

数据结构第二单元练习题答案

数据结构第二单元练习题答案 一.选择 1.树最适合用来表示(  ) A.有序数据元素      B.无序数据元素 C.元素之间具有分支层次关系的数据 D.元素之间无联系的数据 2.在下述结论中,正确的是(  ) ①只有一个结点的二叉树的度为0;  ②二叉树的度为2:  ③二叉树的左右子树可任意交换; ④深度为K的完全二叉树的结点个数小于或等于深度相同的满二叉树. A.①②③     B.②③④    C.②④     D.①④ 3.以下说法正确的是(  ) A.任何一棵二叉树中至少有一个结点的度

算法学习——STL和基本数据结构

第一次接触算法,只是照着自己的方法学习的,总结写的可能不是会很好,但我会努力改进. #STL容器包括顺序式容器和关联式容器. 顺序式容器: ·vector:动态数组,从末尾能快速插入与删除,直接访问任何元素. ·list:双链表,从任何地方快速插入与删除. ·deque:双向队列,从前面或后面快速插入与删除,直接访问任何元素. ·queue:队列,先进先出 ·priority_queue:优先队列,最高优先级元素总是第一个出列. ·stack:栈,先进后出. 关联式容器: ·set:集合,快速查

【数据结构】之散列链表(Java语言描述)

散列链表,在JDK中的API实现是 HashMap 类. 为什么HashMap被称为"散列链表"?这与HashMap的内部存储结构有关.下面将根据源码进行分析. 首先要说的是,HashMap中维护着的是一个数组: transient Node<K,V>[] table; ,数组中的每个元素都是一个 Node 对象.这里的Node是HashMap的一个内部类,代码如下: static class Node<K,V> implements Map.Entry<

旧题新做:从idy的视角看数据结构

“今天你不写总结……!!!” 额…… 还是讲我的吧.这些考试都是idy出的题. 20170121:DFS序. ST表.线段树练习 这是第一次考数据结构. Problem 1. setsum 1 second 给你一个长度为N 的整数序列,支持两种操作: • modity l r val 将区间[l,r] 中的所有数修改为val • query l r 询问区间[l,r] 所有数的和 分析:最简单的线段树,区间更改区间求和.但注意是更改,不是添改,sum与flag需同时覆盖. Problem 2.

数据结构Set和Map

一.数据结构 Set 集合的基本概念:集合是由一组无序且唯一(即不能重复)的项组成的.这个数据结构使用了与有限集合相同的数学概念,应用在计算机的数据结构中.  特点:key 和 value 相同,没有重复的 value.ES6 提供了数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. 1. 如何创建一个 Set const s = new Set([1, 2, 3]); 2.属性 console.log(s.size); // 3 3.Set 类的方法 --set.add(v

数据结构基本概念

什么是数据结构 "数据结构是数据对象,以及存在于该对象的实例和组成实例的数据元素之间的各种联系.这些联系可以通过定义相关的函数来给出"--Sartaj Sahni,<数据结构.算法与应用> "数据结构是ADT(抽象数据类型Abstract Data Type)的物理实现."--Clifford A.Shaffer,<数据结构与算法分析> "数据结构(data structture)是计算机中存储.组织数据的方式.通常情况下,经i想你

分布式缓存技术redis学习系列(二)——详细讲解redis数据结构(内存模型)以及常用命令

Redis数据类型 与Memcached仅支持简单的key-value结构的数据记录不同,Redis支持的数据类型要丰富得多,常用的数据类型主要有五种:String.List.Hash.Set和Sorted Set. Redis数据类型内存结构分析 Redis内部使用一个redisObject对象来表示所有的key和value.redisObject主要的信息包括数据类型(type).编码方式(encoding).数据指针(ptr).虚拟内存(vm)等.type代表一个value对象具体是何种数

【Python&amp;数据结构】 抽象数据类型 Python类机制和异常

这篇是<数据结构与算法Python语言描述>的笔记,但是大头在Python类机制和面向对象编程的说明上面.我也不知道该放什么分类了..总之之前也没怎么认真接触过基于类而不是独立函数的Python编程,借着本次机会仔细学习一下. 抽象数据类型 最开始的计算机语言,关注的都是如何更加有效率地计算,可以说其目的是计算层面的抽象.然而随着这个行业的不断发展,计算机不仅仅用于计算,开发也不仅只关注计算过程了,数据层面的抽象也变得同样重要.虽然计算机语言一开始就有对数据的抽象,但是那些都只是对一些最基本的