当前位置:首页 > 资讯 > info5 > 正文

[置顶] 最基础的各类排序算法和汉罗塔的代码展示

发表于: 2016-11-09   作者:hbblzjy   来源:转载   浏览:
摘要: 以下代码带有文字说明,各位可以直接复制使用,进行结果展示,这里推荐一篇图文介绍算法的文章:http://www.jianshu.com/p/70619984fbc6-(void)viewDidLoad{   [superviewDidLoad];   //NSMutableArray*array=[[NSMutableArrayalloc]initWithObjects:@"20",@"6",@"

以下代码带有文字说明,各位可以直接复制使用,进行结果展示,这里推荐一篇图文介绍算法的文章:http://www.jianshu.com/p/70619984fbc6

- (void)viewDidLoad {

    [super viewDidLoad];
    //NSMutableArray *array = [[NSMutableArray alloc] initWithObjects:@"20",@"6",@"2",@"8",@"9",@"12",@"2",@"4",@"3",@"4",@"7",@"11", nil];
    int array[12] = {20,6,2,8,9,12,2,4,3,4,7,11};
    
    /*
    //冒泡排序:相邻两个比较,大的放后面
    BOOL exchanged = YES;
    for (int i = 0; i < 11 && exchanged; i ++)
    {
        exchanged = NO;
        for (int j = 0; j < 11 - i; j ++)
        {
            int aj = array[j];
            int aj1 = array[j + 1];
            if (aj > aj1)
            {
                exchanged = YES;
                array[j + 1] = aj;
                array[j] = aj1;
            }
        }
    }
     */
    /*
    //选择排序:选择每一轮的小的放在前面,排好序的不比较
    for (int i = 0; i < 12; i ++)
    {
        for (int j = i + 1; j < 12; j ++)
        {
            int ai = array[i];
            int aj = array[j];
            if (ai > aj)
            {
                array[i] = aj;
                array[j] = ai;
            }
        }
    }
     */
    
    /*
    //插入排序:将一个值拿出,空出一个位置,与前面的所有的值比较,比其大的后移一位,直到没有比其小的停止,并把值插入到空位处
    for (int i = 1; i < 12; i ++)
    {
        int ai = array[i],aj;
        int j = i;
        while (j > 0 && (aj = array[j - 1]) > ai)
        {
            array[j] = aj;
            j --;
        }
        array[j] = ai;
    }
     */
    
    //快速排序:首先任意选取一个数据(通常选数组的第一个数)作为关键数据,然后将所有比他小的数据都放在她得前面,所有比他大的数都放到它的后面,与一个数的比较,有时候会前后两个方向进行,这个过程成为一趟快速排序
    //C语言调用方法
    quick(array,0,11);
    
    //排序后输出
    for (int n = 0; n < 12; n ++)
    {
        NSLog(@"%d",array[n]);
    }
    
}
void quick(int a[],int left, int right)
{
    if (left < right)//如果左边索引小于右边的索引就代表已经整理完成一个组了
    {
        int key = a[ left ];
        int low = left;
        int hight = right;
        while ( low < hight)//控制在当前组内寻找一遍
        {
            while( low < hight && a[hight] >= key)//而寻找结束的条件就是:1.找到一个小于或者大于key的数(大于或小于取决于你想升序还是降序)2.没有符合条件 1 的,并且 low 与 hight 的大小没有翻转
            {
                hight --;//向前寻找
            }
            a[ low ] = a [ hight ];
            //找到一个这样的数后就把它赋给前面的被拿走的low的值(如果第一次循环且key是a[left],那么就是给key)
            while( low < hight && a[ low ] <= key)//这是low在当前组内向前寻找,同上,不过注意与key的大小关系停止循环和上面襄樊,因为排序思想是把数往两边放,所以左右两边的数大小与key的关系相反
            {
                low ++;//向后寻找
            }
            a[ hight ] = a[ low ];
        }
        a[ low ] = key;//当在当前组内找完一遍以后就把中间数key回归
        quick( a, left ,low - 1);//最后用同样的方式对分出来的左边的小组进行同上的做法
        quick( a, low + 1, right);//用同样的方式对分出来的右边的小组进行同上的做法,当然最后可能会出现很多次分左右,直到每一组的low = hight为止
    }
}

[置顶] 最基础的各类排序算法和汉罗塔的代码展示

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
玩了个汉诺塔的flash游戏,总结下算法 四五层就不说了,太长,4层要15步,每步一截屏就刷死了,其实
汉诺塔的问题 汉诺塔问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱
汉诺塔的问题 汉诺塔问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱
/* * 程序的版权和版本声明部分 * Copyright (c)2012, 烟台大学计算机学院学生 * All rightsreserve
简单理解: 假设数组array长度为8,序号从0开始。 1、插入排序: (1)排序要进行7次。 for(int i=
数据结构里的汉诺塔,递归的典型代表,几乎讲到递归都会讲到汉诺塔,今天才把汉诺塔看明白,惭愧啊
当盘子数为两个时,移动图如下: 移动规律为: 步骤 盘子编号 源柱子 目标柱子 1 1 A B 2 2 A C 3 1
数据结构里的汉诺塔,递归的典型代表,几乎讲到递归都会讲到汉诺塔,今天才把汉诺塔看明白,惭愧啊
问题描述: 假设有3个分别命名为X,Y,Z的塔座,在塔座X上插有n个直径大小各不相同、依小到大编号为
http://www.cnblogs.com/zhangqqqf/archive/2008/09/12/1289730.html C通过运行时堆栈支持递归函数
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号