排序算法有很多,记得当初一开始学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;     // 最小值下标先初始化为ifor (j=i+1; j<length; j++) {if (arr[minIdx] > arr[j]) { // 如果j下标的数比minIdx下标的数大,改变minIdx的值为jminIdx = 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的增大,算法的时间增长很快。因此使用时需要特别注意。

转载于:https://www.cnblogs.com/zhangguiguang/p/4874955.html

黑马程序员——选择排序相关推荐

  1. 【黑马程序员 C++教程从0到1入门编程】【笔记1】数据类型、运算符、程序流程结构、数组、函数、指针、结构体

    黑马程序员匠心之作|C++教程从0到1入门编程,学习编程不再难 文章目录 1.C++初识 1.1 第一个c++程序 1.2 注释 1.3 变量 1.4 常量 1.5 关键字 1.6 标识符命名规则 2 ...

  2. 黑马程序员C语言基础(第五天)运算符与表达式、程序流程结构、数组和字符串、函数

    https://www.bilibili.com/video/BV15W411K7k6?p=93&spm_id_from=pageDriver 黑马程序员C语言基础(第五天)运算符与表达式.程 ...

  3. 黑马程序员入学Java知识——精华总结

    黑马程序员入学Java知识--精华总结 J2SE部分,Java高新技术部分,7K面试题部分等黑马入学要求的知识点总结! 一.黑马程序员-java概述与基础知识 6 1.何为编程? 6 2.Java语言 ...

  4. 黑马程序员:Java基础总结----Java语言编程规范

       黑马程序员:Java基础总结        Java语言编程规范:参考自SUN公司文档  ASP.Net+Android+IO开发..Net培训.期待与您交流!  I.   排版规范 A.  规 ...

  5. 黑马程序员C++笔记

    C++ 课程链接: 黑马程序员匠心之作|C++教程从0到1入门编程,学习编程不再难_哔哩哔哩_bilibili 一.C++基础语法 1.变量和常量数据 1.1第一个C++程序 编写一个C++程序总共分 ...

  6. [学习笔记]黑马程序员-Hadoop入门视频教程

    文章目录 参考资料 第一章:大数据导论与Linux基础(p1-p17) 1.1 大数据导论 1.1.1 企业数据分析方向 1.1.2 数据分析基本流程步骤 明确分析的目的和思路 数据收集 数据处理 数 ...

  7. 黑马程序员_基础测试

    -------android培训.java培训.期待与您交流! ---------- 黑马程序员训练营基础测试题及个人代码(包含思路.步骤和基本注释) 1. 编写程序计算12+22+32+....+1 ...

  8. html, css学习笔记,自用(B站黑马程序员pink老师)

    附上教学视频链接黑马程序员pink老师前端入门教程 该博文是自己随手记的上述视频笔记 跳转到css, p61 P18 <div> </div>一行一个,<span> ...

  9. 黑马程序员_MongoDB笔记

    根据黑马程序员的课程资料整理所得,仅用于学习使用,如有侵权,请联系删除 1.MongoDB简单介绍 1.1 MongoDB应用场景 应对三高需求 High performance - 对数据库高并发读 ...

最新文章

  1. framebuffer的入门介绍-实现程序分析【转】
  2. 数据预处理之独热编码(OneHotEncoder)
  3. 3.5 梯度校验-机器学习笔记-斯坦福吴恩达教授
  4. UE4 材质:石缝提高混合权重
  5. oracle中sequence详解
  6. php 忽略加载动态某个目录,限定某个目录禁止解析php 、限制user_agent 、php的配制文件、PHP的动态扩展模块...
  7. python tkinter button_Python连载60-Tkinter布局、按钮以及属性详解
  8. 对某产品政策性文件的解读
  9. 如何重置/删除chrome的输入突出显示/焦点边框? [重复]
  10. 一不小心就进入了P2P陷阱
  11. macOS Monterey 12.3.1 (21E258) 虚拟机 ISO 镜像
  12. 从零开始学Java【基本输入输出、排序(sort)、高精度大数运算(BigInteger)】
  13. 2015,走上人生巅峰,让APK编辑器祝您一臂之力!
  14. 拆弹实验-phase_1
  15. 目标和学习方法的重要性
  16. 如何更好地理解中间件和洋葱模型
  17. 【ExcelPlanet】SUMPRODUCT函数用法:单条件、多条件、模糊条件求和与计数
  18. 字符串转换成十进制整数
  19. 查看.tar.gz文件内容(不需要解压)
  20. 我逼走创业合伙人,白干七年净身出户,我是跪着前行的CEO

热门文章

  1. 用计算机求函数公式,计算机常用的函数公式有哪些?
  2. pyquery获取不到网页完整源代码_python动态网页爬取:爬取pexel上的图片
  3. 大学计算机需要论文吗,关于大学计算机论文范文.docx
  4. 目前市场上的电脑一体机从计算机种类,电脑一体机发展方向是什么?
  5. 排球制作html,MAYA打造排球建模教程
  6. 基于RobotFramework实现自动化测试
  7. 计算机网络提高网络安全意识,提升网络安全意识 共创清朗网络环境
  8. java中number类型能否相除_Java中 如果复数类成员是int型,怎么实现两个复数相除...
  9. 蓝牙耳机声音一顿一顿的_线控耳机党阵地转移成功,OPPO这款TWS耳机体验满分...
  10. 0 0/2 * * * ? linux文本含义,Linux基础2.0