数据结构与算法八: 5)排序算法--选择排序

275 阅读2分钟

这是我参与8月更文挑战的第10天,活动详情查看:8月更文挑战

关注我,以下内容持续更新

数据结构与算法(一):时间复杂度和空间复杂度

数据结构与算法(二):桟

数据结构与算法(三):队列

数据结构与算法(四):单链表

数据结构与算法(五):双向链表

数据结构与算法(六):哈希表

数据结构与算法(七):树

数据结构与算法(八):排序算法

数据结构与算法(九):经典算法面试题

选择排序

选择排序的核心是选择,将整个待排序的记录序列划分成有序区和无序区,左边是有序区,右边是无序区,从右边无序区找出最小值的位置,与左边有序区最后一个元素交换, 对于n个元素的序列,最多经过n-1轮排序,就可以将所有元素排好序.

基本思路: 双层循环,先假设第1个元素最小即min=0。第一次从arr[1]~arr[n-1]中选取最小值,与arr[0]交换;第二次从arr[2]~arr[n-1]中选取最小值,与arr[1]交换;第三次从arr[3]~arr[n-1]中选取最小值,与arr[2]交换;…;第i次从arr[i]~arr[n-1]中选取最小值,与arr[i-1]交换;总共通过n-1次循环,得到一个按排序码从小到大排列的有序序列。

代码逻辑: 双层循环,先假设第1个元素最小即min=0,每一轮内层循环都是arr[min]和后边的每个arr[i]进行对比,若比arr[min]小就让min=i,第一轮内层循环走完后,交换第1个元素和第min个元素,此时最小排在最左边。第二轮内层循环就少循环第一位,第二轮循环走完后,交换第2个元素和第min个元素,此时第二小已经排在第二位。第n轮内层循环走完后,交换第n个元素和第min个元素。

选择排序.jpg

代码实现

 //选择排序
-(void)selectSort:(NSMutableArray*)arr{
    for (int i = 0; i<arr.count; i++) {
        int min = i;
        for (int j = i; j<arr.count; j++) {
            if ([arr[min+1] intValue] > [arr[j] intValue]) {
                min = j;
            }
        }
        NSNumber*tmp = arr[i];
        arr[i] = arr[min];
        arr[min] = tmp;
    }
}

选择排序比没有优化过的冒泡排序快,因为交换次数少。

其他排序算法

排序算法:1)直接插入排序

排序算法:2)希尔排序

排序算法:3)冒泡排序

排序算法:4)快速排序

排序算法:5)选择排序

排序算法:6)归并排序

排序算法:7)基数排序

排序算法:8)堆排序

如果觉得我写的不错 请给我点个赞 您的支持是我最大的动力