冒泡排序:延申的有很多种,有的是先确定最大值放到后面,有的是先确定最小值放到前边,还有就是反过来,先确定最小值的位置,但是本质都是:不断两两比较,交换位置。。。第一趟确定一个最大(最小)值放到前边(后边),第二趟,排除选的最值继续排。。。。趟数是外循环控制,交换位置的事交给内循环。
  直接选择排序:这个应该比冒泡排序快,因为它内循环只是确定最大(小)索引值,然后在外循环的内部只有一次交换最值,而冒泡排序只要值不一样,每次都要交换相对最值,下面看代码再理解一下。

  嵌套循环中,一般把外部循环的变量导入到内循环循环条件中,这样,外部循环变量变了,势必会导致内循环循环条件的改变,减少内循环次数。

  因为刚看了一个简单工厂模式,所以就用工厂模式来试着实践一下排序,含冒泡,直接选择还有一个排序反转(其实不应该归到排序接口里),由于刚刚接触工厂模式,代码中,就只是用的int[ ]型数组,没有考虑其他类型数组及正序/反序,正序/反序就是修改内循环里交换条件的大于小于改变。。

  1. package javafirst;
  2.  
  3. /**
  4. * 此接口定义排序方法
  5. *
  6. */
  7. interface Sort{
  8. /**
  9. * 排序方法
  10. * @param arr 需要排序的int型数组
  11. * @return 返回一个int型数组
  12. */
  13. public int[] sort(int[] arr);
  14. }
  15. /**
  16. *实现冒泡排序
  17. */
  18. class BubbleSort implements Sort{
  19. public int[] sort(int[] arr){
  20. //因为外层for循环是控制循环趟数,从1开始比较直观一些
  21. for(int i = 1; i < arr.length; i ++){
  22. for(int k = 0; k < arr.length - i; k++){
  23. if(arr[k] > arr[k+1]){
  24. int temp = arr[k];
  25. arr[k] = arr[k+1];
  26. arr[k+1] = temp;
  27. }
  28. }
  29. }
  30. return arr;
  31. }
  32. }
  33. /**
  34. *实现直接排序
  35. */
  36. class SelectSort implements Sort{
  37. public int[] sort(int[] arr){
  38. for(int i = 1; i < arr.length; i++){
  39. int index = 0;
  40. //此内循环的目的是找出最大值的索引
  41. for(int k = 1; k <= arr.length - i; k++){
  42. if(arr[k] > arr[index])
  43. //这里只是交换索引,而不是交换值
  44. index = k;
  45. }
  46. //当上边内循环循环完毕之后,会选出一个最大值,其索引值为index,然后与数组后边值交换位置
  47. //这里是值得交换
  48. int temp = arr[arr.length - i];
  49. arr[arr.length - i] = arr[index];
  50. arr[index] = temp;
  51. }
  52. return arr;
  53. }
  54. }
  55. /**
  56. *实现反转排序
  57. */
  58. class ReverseSort implements Sort{
  59. public int[] sort(int[] arr){
  60. //就是交换数组前后的相对位置
  61. for(int i = 0; i < arr.length / 2; i ++){
  62. int temp = arr[i];
  63. arr[i] = arr[arr.length - 1 - i];
  64. arr[arr.length - 1 - i] = temp;
  65. }
  66. return arr;
  67. }
  68. }
  69. /**
  70. *排序类实例工厂
  71. */
  72. class SortFactory{
  73.  
  74. /**
  75. * 实例化
  76. * @param sortName 排序方式
  77. * @return 返回一个Sort实例
  78. */
  79. public Sort createSort(String sortName){
  80. String str = sortName.toLowerCase();
  81. Sort sor = null;
  82. switch (str){
  83. case "bubblesort":
  84. sor = new BubbleSort();
  85. break;
  86. case "selectsort":
  87. sor = new SelectSort();
  88. break;
  89. case "reversesort":
  90. sor = new ReverseSort();
  91. break;
  92. }
  93. return sor;
  94. }
  95. }
  96. /**
  97. *遍历数组类
  98. */
  99. class Show{
  100. public void showArray(int[] arr){
  101. for(int i : arr){
  102. System.out.print(i + " ");
  103. }
  104. System.out.println();
  105. }
  106. }
  107.  
  108. public class Test13 {
  109. public static void main(String[] args){
  110. Show show = new Show();
  111.  
  112. //使用冒泡排序
  113. int[] arr1 = new int[]{2,4,5,3,6,1,12,14,17,22,15,18,16,12,13,18,10};
  114. System.out.println("输出原数组:");
  115. show.showArray(arr1);
  116. Sort so1 = new SortFactory().createSort("BubbleSort");
  117. int[] arrBubble = so1.sort(arr1);
  118. System.out.println("冒泡排序结果:");
  119. show.showArray(arrBubble);
  120.  
  121. //使用直接排序
  122. int[] arr2 = new int[]{2,4,5,3,6,1,12,14,17,22,15,18,16,12,13,18,10};
  123. System.out.println("输出原数组:");
  124. show.showArray(arr2);
  125. Sort so2 = new SortFactory().createSort("SELECTSORT");
  126. int[] arrSelect = so2.sort(arr2);
  127. System.out.println("直接排序结果:");
  128. show.showArray(arrSelect);
  129.  
  130. //反转排序,得使用排序好的数组
  131. Sort so3 = new SortFactory().createSort("ReverseSORT");
  132. int[] arrReverse = so3.sort(arr2);
  133. System.out.println("反转已排好序数组排序结果:");
  134. show.showArray(arrReverse);
  135. }
  136.  
  137. }

  输出结果

Java冒泡排序与直接选择排序代码随笔的更多相关文章

  1. java 冒泡排序 二分查找 选择排序 插入排序

    下面这个程序是先定义一个整型数组,然后将其中的元素反序赋值,再用冒泡排序进行排序以后用二分查找来查找其中是否有某个数,返回值为-1时表示这个数可能小于这个数组的最小值或大小这个数组的最大值,-2表示这 ...

  2. java 冒泡排序法、选择排序

    1.冒泡排序 /* * 冒泡排序 * 外层控制循环多少趟,内层控制每一趟的循环次数 */ public class Test08 { public static void main(String[] ...

  3. Java冒泡排序与二分法查找的代码随笔

    package javafirst; import java.util.Arrays; class MaoPao{ //升序排列 /** * @param arr 要排序的数组 * @return i ...

  4. java基础算法之选择排序

    选择排序 选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完. ...

  5. 冒泡排序Vs直接选择排序

    什么是排序?为什么要使用排序?事实上我们生活中处处都用到了排序.拿字典来说,如今,我们要在字典中查找某个字(已经知道这个字的读音),首先.我们须要依据这个字的读音,找到它所所在文件夹中的位置,然后依据 ...

  6. 冒泡排序与简单选择排序——Java实现

    1.冒泡排序 1)原理说明:反复遍历要排序的数列,一次比較两个元素,假设他们的顺序错误就把他们交换过来.走訪数列的工作是反复地进行直到没有再须要交换,也就是说该数列已经排序完毕. 2)代码实现: pa ...

  7. Java学习笔记day07_琐碎知识_水仙花数_ASCII码_冒泡排序_简单选择排序_折半查找

    琐碎知识: 水仙花数, ASCII码, 冒泡排序, 简单选择排序, 折半查找 1.水仙花数 每位数的平方的和等于本身. 如100到999之间的水仙花数满足: 个位的平方+十位的平方+百位的平方 = 本 ...

  8. java 合并排序算法、冒泡排序算法、选择排序算法、插入排序算法、快速排序算法的描述

    算法是在有限步骤内求解某一问题所使用的一组定义明确的规则.通俗点说,就是计算机解题的过程.在这个过程中,无论是形成解题思路还是编写程序,都是在实施某种算法.前者是推理实现的算法,后者是操作实现的算法. ...

  9. C语音中最简单的排序冒泡排序和选择排序代码实现(非指针)

    #include<stdio.h> int main() { int a[5] = { 2,5,7,3,-1 }; int n = sizeof(a) / sizeof(a[0]);//元 ...

随机推荐

  1. Oracle自定义类型在C#中调用示例

    1.C#代码: 1)using Oracle.DataAccess.Types; using System; using System.Collections.Generic; using Syste ...

  2. python3 turtle 画国际象棋棋盘

    python3 turtle 画国际象棋棋盘 #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:Hiuhung Wan import turt ...

  3. Day2:数据运算

    一.算数运算 如: #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:Hiuhung Wan print(10%2) #求模(取模) # 0 ...

  4. sublime找到成对标签(Ctrl+Shift+")

    sublime找到成对标签(Ctrl+Shift+") windows版本默认快捷键是Ctrl+Shift+" sublime text怎么突出显示成对标签 使用BracketHi ...

  5. 硬件——STM32 , SN74HC573锁存器

    74HC573是一款高速CMOS器件: 上图中:输出使能为:OE   锁存使能为:LE 典型电路: 上图中:PWR-AL-0,PWR-AL-1,PWR-AL-2:是单片机输出的高低电平给573 对应的 ...

  6. CSDN学院 免费技术答疑公开课,本周三场即将开播~~~

    为了酬谢广大学员.CSDN学院特推出免费技术答疑公开课,让您开启一段充实的学习之旅~ 本周三场即将开播! ----------------------------------------------- ...

  7. [RxJS] Stopping a shared observable execution

    ConnectableObservable has the connect() method to conveniently dictate the start of the shared execu ...

  8. 【z08】乌龟棋

    描述 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N格是终点,游戏要求玩家控制一个乌龟棋子从起点出发走到终点 ...

  9. FFTW库+VS2012配置

    配置环境:Windows7+VS2012 下载资源包,解压后例如以下图: 要嵌入VS2012中,须要相应的lib文件,于是接下来使用VS2012来生成相应的lib文件 在VS2012/Common7/ ...

  10. centos 查询DNS

    cat  /etc/resolv.conf