美文网首页
部分简单排序

部分简单排序

作者: 过江鸟iOSer | 来源:发表于2019-03-21 15:38 被阅读0次

调用测试

//test
    NSMutableArray *arr = [@[@"3", @"5", @"4", @"2", @"6"] mutableCopy];
//    arr = [[self insertionSortWithArray:arr] mutableCopy];
//    arr = [[self BInsertSortWithArray:arr] mutableCopy];
//    arr = [self shellSortWithArray:arr];
//    arr = [self bubbleSortWithArray:arr];
    arr = [self heapSortWithArray:arr];
    NSLog(@"result = %@", arr);

插入排序

/**
 * 方法名:insertionSort 说明:插入排序 时间复杂度O(N^2)
 * 升序
 */
- (NSMutableArray *)insertionSortWithArray:(NSMutableArray *)array {
    for (int i = 1; i < array.count; i++) {
        NSString *temp = [NSString stringWithFormat:@"%@", array[i]];
        int j = i - 1;
        while (j >= 0 && [temp compare:array[j]] == NSOrderedAscending) {
            array[j + 1] = array[j];
            j--;
        }
        array[j + 1] = temp;
    }
    return array;
}

二分插入排序

/**
 * 方法名:BInsertSort 说明:二分插入排序 时间复杂度O(N^2) 因为插入排序的前i - 1个元素是排好序的
 * 所有将第i个元素插入到前面查到元素的时候 可以用二分查找
 * 升序
 */
- (NSMutableArray *)BInsertSortWithArray:(NSMutableArray *)array {
    for (int i = 1; i < array.count; i++) {
        int low = 0;
        NSString *temp = [NSString stringWithFormat:@"%@", array[i]];
        int high = i - 1;
        int position = 0;
        // 二分找不到时 low 的位置是大于key的最小元素,high是小于key的最大元素
        while (low <= high) {
            int mid = (low + high) / 2;
            if ([array[mid] compare:temp] == NSOrderedAscending) {
                low = mid + 1;
            } else {
                high = mid - 1;
            }
            position = high;
            for (int j = i; j > position && j > 0; j--) {
                array[j] = array[j - 1];
            }
            array[position + 1] = temp;
        }
    }
    return array;
}

希尔排序

/**
 * 方法名:shellSort 说明:希尔排序 时间复杂度(N^2) 利用增量序列 对用增量分组得到的序列进行插入排序。
 * 升序
 */
- (NSMutableArray *)shellSortWithArray:(NSMutableArray *)array {
    for (int gap = (int)array.count / 2; gap > 0; gap /= 2) {
        for (int i = 0; i < gap; i++) {
            for (int j = i + gap; j < array.count; j += gap) {
                NSString *temp = array[j];
                if ([temp compare:array[j - gap]] == NSOrderedAscending) {
                    int k = j - gap;
                    while (k >= 0 && [array[k] compare:temp] == NSOrderedDescending) {
                        array[k + gap] = array[k];
                        k -= gap;
                    }
                    array[k + gap] = temp;
                }
            }
        }
    }
    return array;
}

冒泡排序

/**
 * 方法名:bubbleSort 说明:冒泡排序 时间复杂度O(N^2)
 * 升序
 */
- (NSMutableArray *)bubbleSortWithArray:(NSMutableArray *)array {
    for (int i = 0; i < array.count; i++)
        for (int j = i + 1; j < array.count; j++) {
            if ([array[i] compare:array[j]] == NSOrderedDescending) {
                NSString *temp = array[i];
                array[i] = array[j];
                array[j] = temp;
            }
        }
    return array;
}

相关文章

  • 部分简单排序

    调用测试 插入排序 二分插入排序 希尔排序 冒泡排序

  • 【排序】选择排序

    选择排序(Selection sort)是一种简单直观的排序算法,将数列分为两部分:排序部分和待选择部分,每次从待...

  • 选择排序

    选择排序是一种简单直观的排序算法,它通过在未排序部分中选择最小(大)的元素,加入到已排序部分的末尾,依此类推,直到...

  • 插入排序

    原理 插入排序是一种简单的排序算法,它将待排序的序列看作两部分,左半部分已经有序,右半部分则是乱序,初始状态下,左...

  • 搜索引擎(0xFE) --- 用机器学习再说搜索排序

    前面说排序的时候已经简单了说了一下排序的方法,包括三部分:相关性排序,商品本身的属性排序,个性化排序,无论怎么排,...

  • 6、排序算法

    选择排序、冒泡排序、插入排序三种排序算法可以总结为如下:都将数组分为已排序部分和未排序部分。 选择排序将已排序部分...

  • FuzzyWuzzy and Levenshtein

    FuzzyWuzzy 简单比较 部分比 单词排序比 单词集合比 Process Levenshtein Leven...

  • 常用排序算法(Python实现), 持续更新中

    一、非线性时间比较类排序 交换排序冒泡排序快速排序 插入排序简单插入排序希尔排序 选择排序简单选择排序堆排序 归并...

  • 对于基础排序算法的简要总结

    本文主要分析排序算法中的选择排序、插入排序、希尔排序、归并排序、快速排序和堆排序,以及其部分优化方式,部分代码示例...

  • Javascript基础算法排序

    代码部分 快速排序 冒泡排序 //选择排序

网友评论

      本文标题:部分简单排序

      本文链接:https://www.haomeiwen.com/subject/olfcvqtx.html