码迷,mamicode.com
首页 > 编程语言 > 详细

黑马程序员——选择排序

时间:2015-10-13 17:17:55      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:

排序算法有很多,记得当初一开始学C时就有这种问题。那个时候会用也最易理解的排序算法,就是选择排序了(当时并不知道这样的算法还有名字)。

思想

还是先来看看选择排序的思想。选择排序的思想非常直接,不是要排序么?那好,从所有序列中先找到最小的,然后放到第一个位置。之后再看剩余元素中最小的,放到第二个位置……以此类推,就可以完成整个的排序工作了。可以很清楚的发现,选择排序是固定位置,找元素。

//
//  main.m
//  SelectSort
//
//  Created by 张贵广 on 15/10/13.
//  Copyright © 2015年 HZNU. All rights reserved.
//
// 选择排序

#import <Foundation/Foundation.h>

// 选择排序
void selectSort(int *arr, int length) {
    int i, j;
    int temp;
    int minIdx; // 最小值下标
    
    for (i=0; i<length-1; i++) {
        minIdx = i;     // 最小值下标先初始化为i
        for (j=i+1; j<length; j++) {
            if (arr[minIdx] > arr[j]) { // 如果j下标的数比minIdx下标的数大,改变minIdx的值为j
                minIdx = j;
            }
        }
        // 把minIdx下标的值与i下标的值交换
        temp = arr[i];
        arr[i] = arr[minIdx];
        arr[minIdx] = temp;
    }
}

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        int i;
        int arr[] = {4, 2, 5, 1, 6, 9, 0, 7, 8, 3};     // 定义数组
        int length = sizeof(arr)/sizeof(arr[0]);        // 算出数组长度
        
        // 调用选择排序
        selectSort(arr, length);
        
        // 输出排序后的数组
        for (i=0; i<length; i++) {
            printf("%i ", arr[i]);
        }
        printf("\n");
    }
    return 0;
}

分析

从选择排序的思想或者是上面的代码中,我们都不难看出,寻找最小的元素需要一个循环的过程,而排序又是需要一个循环的过程。因此显而易见,这个算法的时间复杂度也是O(n*n)的。这就意味值在n比较小的情况下,算法可以保证一定的速度,当n足够大时,算法的效率会降低。并且随着n的增大,算法的时间增长很快。因此使用时需要特别注意。

黑马程序员——选择排序

标签:

原文地址:http://www.cnblogs.com/zhangguiguang/p/4874955.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!