标签:
排序算法有很多,记得当初一开始学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