对于一个int数组,请编写一个选择排序算法,对数组元素排序。

给定一个int数组A及数组的大小n,请返回排序后的数组。

测试样例:
  1. [1,2,3,5,2,3],6
  1. [1,2,2,3,3,5]
  2.  
  3. 冒泡排序:
  1. package test;
  2.  
  3. public class BubbleSort {
  4. public int[] bubbleSort(int[] A, int n) {
  5. int temp;
  6. for (int j = 0; j < n - 1; j++) {
  7. for (int i = 0; i < n - 1 - j; i++) {
  8. if (A[i + 1] < A[i]) {
  9. temp = A[i];
  10. A[i] = A[i + 1];
  11. A[i + 1] = temp;
  12. }
  13. }
  14. }
  15. return A;
  16. }
  17.  
  18. public static void main(String[] args) {
  19. BubbleSort bubSort = new BubbleSort();
  20. int[] A = { 1, 2, 3, 5, 2, 3 };
  21. int[] ASort = bubSort.bubbleSort(A, A.length);
  22. for (int i = 0; i < ASort.length; i++) {
  23. System.out.println(ASort[i]);
  24. }
  25.  
  26. }
  27.  
  28. }

运行结果如下:

1 2 2 3 3 5

时间复杂度为O(n*n);两两相互比较,较小的元素向上冒泡,较大的元素沉到水底。

选择排序:

  1. package test;
  2.  
  3. public class SelectionSort {
  4. public int[] selectionSort(int[] A, int n) {
  5. // write code here
  6. int temp;
  7. for (int j=0;j<n-1;j++)
  8. {
  9. for (int i=j+1;i<n;i++)
  10. {
  11. if (A[j]>A[i])
  12. {
  13. temp=A[j];
  14. A[j]=A[i];
  15. A[i]=temp;
  16. }
  17. }
  18. }
  19. return A;
  20. }
  21.  
  22. public static void main(String[] args) {
  23. SelectionSort selSort = new SelectionSort();
  24. int[] A = { 1, 2, 3, 5, 2, 3 };
  25. int[] ASort = selSort.selectionSort(A, A.length);
  26. for (int i = 0; i < ASort.length; i++) {
  27. System.out.println(ASort[i]);
  28. }
  29. }
  30.  
  31. }

运行结果如下:

1 2 2 3 3 5

时间复杂度为O(n*n);第一位存储最小的元素,第二位存储第二小的元素,以此类推。

插入排序:

  1. package test;
  2.  
  3. public class InsertionSort {
  4. public int[] insertionSort(int[] A, int n) {
  5. int temp;
  6. for (int j = 1; j < n; j++) {
  7. for (int i = j; i > 0; i--) {
  8. if (A[i] < A[i - 1]) {
  9. temp = A[i];
  10. A[i] = A[i - 1];
  11. A[i - 1] = temp;
  12. }
  13. }
  14. }
  15. return A;
  16. }
  17.  
  18. public static void main(String[] args) {
  19. InsertionSort insSort = new InsertionSort();
  20. int[] A = { 1, 2, 3, 5, 2, 3 };
  21. int[] ASort = insSort.insertionSort(A, A.length);
  22. for (int i = 0; i < ASort.length; i++) {
  23. System.out.println(ASort[i]);
  24. }
  25. }
  26. }

运行结果如下: 1 2 2 3 3 5

时间复杂度为O(n*n),第二个数同第一个数比,如果比第一个小,就交换位置,然后第三个数同第二个数比,如果小就交换位置,并且继续同第一个数比较大小,如果小就交换位置,以此类推。

排序算法(一)(时间复杂度均为O(n*n))的更多相关文章

  1. C#中常用的排序算法的时间复杂度和空间复杂度

    常用的排序算法的时间复杂度和空间复杂度   常用的排序算法的时间复杂度和空间复杂度 排序法 最差时间分析 平均时间复杂度 稳定度 空间复杂度 冒泡排序 O(n2) O(n2) 稳定 O(1) 快速排序 ...

  2. 时间复杂度为O(nlogn)的排序算法

    时间复杂度为O(nlogn)的排序算法(归并排序.快速排序),比时间复杂度O(n²)的排序算法更适合大规模数据排序. 归并排序 归并排序的核心思想 采用"分治思想",将要排序的数组 ...

  3. 惊!世界上竟然有O(N)时间复杂度的排序算法!计数排序!

    啥?你以为排序算法的时间复杂度最快也只能O(N*log(N))了? O(N)时间复杂度的排序算法听说过没有?计数排序!!它是世界上最快最简单的算法!!! 计数排序算法操作起来只有三步,看完秒懂! 根据 ...

  4. 几种排序算法的学习,利用Python和C实现

    之前学过的都忘了,也没好好做过总结,现在总结一下. 时间复杂度和空间复杂度的概念: 1.空间复杂度:是程序运行所以需要的额外消耗存储空间,一般的递归算法就要有o(n)的空间复杂度了,简单说就是递归集算 ...

  5. C#排序算法的比较

    首先通过图表比较不同排序算法的时间复杂度和稳定性. 排序方法 平均时间 最坏情况 最好情况 辅助空间 稳定性 直接插入排序 O(n2) O(n2) O(n) O(1) 是 冒泡排序 O(n2) O(n ...

  6. 基本排序算法<一>

    一 选择排序 原理:选择排序很简单,他的步骤如下: 从左至右遍历,找到最小(大)的元素,然后与第一个元素交换. 从剩余未排序元素中继续寻找最小(大)元素,然后与第二个元素进行交换. 以此类推,直到所有 ...

  7. 排序算法总结及Java实现

    1. 整体介绍 分类 排序大的分类可以分为两种,内排序和外排序.在排序过程中,全部记录存放在内存,则称为内排序,如果排序过程中需要使用外存,则称为外排序.主要需要理解的都是内排序算法: 内排序可以分为 ...

  8. 深入浅出数据结构C语言版(17)——有关排序算法的分析

    这一篇博文我们将讨论一些与排序算法有关的定理,这些定理将解释插入排序博文中提出的疑问(为什么冒泡排序与插入排序总是执行同样数量的交换操作,而选择排序不一定),同时为讲述高级排序算法做铺垫(高级排序为什 ...

  9. php算法基础----时间复杂度和空间复杂度

    算法复杂度分为时间复杂度和空间复杂度. 其作用: 时间复杂度是指执行算法所需要的计算工作量: 而空间复杂度是指执行这个算法所需要的内存空间. (算法的复杂性体现在运行该算法时的计算机所需资源的多少上, ...

  10. 常用排序算法的C++实现

    排序是将一组"无序"的记录序列调整为"有序"的记录序列. 假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在 ...

随机推荐

  1. finder怎么才能找到library

    右键Finder——前往目录 输入~/Library

  2. Spring小练习之宝宝淘项目

    数据库准备 # 表结构 CREATE TABLE `t01_user` ( `) NOT NULL AUTO_INCREMENT COMMENT '自增主键', `) DEFAULT NULL COM ...

  3. Go cron定时任务的用法

    cron是什么 cron的意思就是:计划任务,说白了就是定时任务.我和系统约个时间,你在几点几分几秒或者每隔几分钟跑一个任务(job),就那么简单. cron表达式 cron表达式是一个好东西,这个东 ...

  4. R 分类进行数值处理

    主要Mark一下R程序中,分类进行数值计算的情况. 1.aggregate函数 有数据框case,列名分别a,b,c,d,e,f (1)根据一列对另一列求和:根据a,对d求和 sum1 <- a ...

  5. [py]chr ord

    http://www.xuebuyuan.com/2067536.html 也可以help(ord)

  6. C#中的bitmap类和图像像素值获取方法

    一.Bitmap类 Bitmap对象封装了GDI+中的一个位图,此位图由图形图像及其属性的像素数据组成.因此Bitmap是用于处理由像素数据定义的图像的对象.该类的主要方法和属性如下: 1. GetP ...

  7. MVC出错案例之一:主外键映射失败

    今天在编写DomainModel和DomainMapper,最后放到OnModelCreating中运行的时候,给我抛出了如下错误: One or more validation errors wer ...

  8. 学习Shell脚本编程(第1期)_Shell命令行书写规则

    Shell命令行的书写规则 对Shell命令行基本功能的理解有助于编写更好的Shell程序,在执行Shell命令时多个命令可以在一个命令行上运行,但此时要使用分号(:)分隔命令,例如: [root@l ...

  9. 系分过了,mark一下,就从这里开始吧

    算是重新归回吧,发现写博客还是这里人气比较旺,开源中国不行,动弹人气还可以,不过都没啥节操, 这么多年没来了,发现竟然还排名1150,不容易,继续加油.有种回娘家的赶脚

  10. Fork一个仓库

    Fork 是对一个仓库的克隆.克隆一个仓库允许你自由试验各种改变,而不影响原始的项目. 一般来说,forks 被用于去更改别人的项目(贡献代码给已经开源的项目)或者使用别人的项目作为你自己想法的初始开 ...