数据结构——算法设计(12页)方案三

方案三的思路尽可能减少元素的重复挪动,设法实现元素移动一次性地“最终定位”;同时在空间效率方面,避免大段复制数据元素序列,降低缓存元素所需的辅助空间使用量。

代码如下:

#include<stdio.h>

int gcd(int a , int b)  {
    if(a%b!=0)
        gcd(b,a%b) ;
    else
        return b ;
}

void leftshift3(int *a , int n , int p) {
    int i , j , k , m , d ;
    int temp ;
    int g = gcd(p,n) ;
   // printf("%d\n",g) ;
    int M = n / g ;
    for(i = 0 ; i < g ; i++)    {
        temp = a[i] ;
        for(j = i , m = 1 ; m < M ; m++)    {
            k = (m*p+i)%n ;
            a[j]=a[k] ;
            j = k ;
        }
        a[j] = temp ;
       // printf("%d\n",j) ;

    }
}
int main()  {
    int a[] = {1,2,3,4,5,6,7,8} ;
    leftshift3(a,8,3);
    for(int i = 0 ; i < 8 ; i++)
        printf("%d ",a[i]) ;
    printf("\n") ;
    return 0 ;
}

  

数据结构——算法设计(12页)方案三

时间: 2024-08-10 21:29:05

数据结构——算法设计(12页)方案三的相关文章

数据结构算法C语言实现(三十二)--- 9.1静态查找表

一.简述 静态查找表又分为顺序表.有序表.静态树表和索引表.以下只是算法的简单实现及测试,不涉及性能分析. 二.头文件 1 /** 2 author:zhaoyu 3 date:2016-7-12 4 */ 5 #include "6_3_part1_for_chapter9.h" 6 typedef struct { 7 int key; 8 }SElemType; 9 //静态查找表的顺序储存结构 10 #define ElemType SElemType 11 #define K

算法设计与分析(三)贪心算法--活动安排问题

活动安排问题https://blog.csdn.net/qq_40452317/article/details/88875384 贪心算法汇总--喷水装置问题.会场安排问题.过河问题https://blog.csdn.net/liujiuxiaoshitou/article/details/69728714 原文地址:https://www.cnblogs.com/yasheng/p/12517250.html

算法设计12——跳跃表

原文地址:https://www.cnblogs.com/Ian-learning/p/8734002.html

数据结构算法设计大题(二叉树)

一.二叉树的前序遍历,写出一种非递归算法 二叉链表的结点类型为: struct bnode { char data; struct bnode *lchild,*rchild; }; typedef struct bnode Bnode *Btree; //*Btree是一个指针类型标识符 前序遍历非递归算法: void preorder (Btree t) { Bnode *s[M];//设栈的容量为M Bnode *p=t;int top=-1;//栈为空 while((top!=-1)||

数据结构与算法分析(六)——算法设计技巧

从算法的实现向算法的设计转变,提供解决问题的思路 1.贪心算法 一种局部最优算法设计思路,思想是保证每一步选择在当前达到最优.一个很常见的贪心算法案例是零钱找取问题. 调度问题:书上的调度问题比较简单,其目标是所有作业的平均持续时间(调度+运行)最短,无论是但处理器还是多处理器,最优解的方案总是按作业的长短排序进行调度.<计算机算法设计与分析>上的作业调度的目标是最后完成时间最小,这要稍微复杂一些. 霍夫曼编码:最优编码必定保持满树的性质,基本问题在于找到总之最小的满二叉树.最简单的霍夫曼编码

《数据结构与算法分析:C语言描述》复习——第十章“算法设计技巧”——Alpha-Beta剪枝

2014.07.08 22:43 简介: “搜索”与“剪枝”几乎是如影随形的.此处的“搜索”指的是带有回溯算法的深度优先搜索. 在之前的“Minimax策略”中我们给出了一个三连棋的程序,运行后你就知道计算一步棋要花多少时间. 为了计算最优的一步棋,我们可能需要递归9万多次.如果毫无疑问这种阶乘式的穷举过程必须通过剪枝来加速. 本篇介绍一种用于Minimax策略的剪枝思路——α-β剪枝. 剪枝的英语是pruning,所以不要想当然说成trimming. 图示: 在上一篇讲解Minimax策略的博

实验三 跳表算法设计与实现

一.实验名称:跳表算法设计与实现 二.实验目的: 掌握跳表的数据结构. 掌握跳表插入算法的思想和实现. 三.实验内容 完善下列程序,并回答问题. 1 #include <iostream.h> 2 #include<stdlib.h> 3 4 enum ResultCode{Underflow, Overflow, Success, Duplicate, RangeError, NotPresent}; 5 template <class T> 6 struct SNo

数据结构和算法设计专题之---判断两个链表是否相交并找出交点

题目: 一个比较经典的问题,判断两个链表是否相交,如果相交找出他们的交点. 首先来看一下如何判断两个链表是否存在相交的节点: 思路: 1.碰到这个问题,第一印象是采用hash来判断,将两个链表的节点进行hash,然后判断出节点,这种想法当然是可以的. 2.当然采用暴力的方法也是可以的,遍历两个链表,在遍历的过程中进行比较,看节点是否相同. 3.第三种思路是比较奇特的,在编程之美上看到的.先遍历第一个链表到他的尾部,然后将尾部的next指针指向第二个链表(尾部指针的next本来指向的是null).

【转载】数据结构与算法设计

原文: 数据结构与算法设计