黑马程序员技术交流社区

标题: 冒泡排序和选择排序的代码体现 [打印本页]

作者: 小棽    时间: 2015-1-21 19:06
标题: 冒泡排序和选择排序的代码体现
  1. public class Sort {

  2.         public static void main(String[] args) {
  3.                 bubbleSort();
  4.                 System.out.println("--------------------");
  5.                 selectSort();
  6.                
  7.         }
  8.         //冒泡排序
  9.         public static void bubbleSort(){
  10.                 int[] arr = {49,56,12,87,30,25,14};  //定义一个未排序的数组
  11.                 System.out.print("进行未排序前的遍历:");
  12.                 printArray(arr); //遍历数组
  13.                 System.out.println();
  14.                 for(int i = 0; i < arr.length; i++){
  15.                         for(int j = 0; j < arr.length - 1 - i; j++){//没排序完一次,最大的就在最后面,所以不需要再比较,每次就少比较i次
  16.                                 if(arr[j] > arr[j+1]){  //如果前面一个元素比后面一个元素大,就交换位置
  17.                                         int temp = arr[j];
  18.                                         arr[j] = arr[j+1];
  19.                                         arr[j+1] = temp;
  20.                                 }
  21.                         }
  22.                         System.out.print("第"+(i+1)+"次的结果为:");
  23.                         printArray(arr); //遍历每一次排序的结果
  24.                         System.out.println();
  25.                 }
  26.                
  27.         }
  28.         //选择排序
  29.         public static void selectSort(){
  30.                 int[] arr = {49,56,12,87,30,25,14};
  31.                 System.out.print("进行未排序前的遍历:");
  32.                 printArray(arr); //遍历数组
  33.                 System.out.println();
  34.                 for(int i = 0; i < arr.length; i++){
  35.                         for(int j = i+1; j < arr.length; j++){
  36.                                 if(arr[i] > arr[j]){  
  37.                                         int temp = arr[i];
  38.                                         arr[i] = arr[j];
  39.                                         arr[j] = temp;
  40.                                 }
  41.                         }
  42.                         System.out.print("第"+(i+1)+"次的结果为:");
  43.                         printArray(arr); //遍历每一次排序的结果
  44.                         System.out.println();
  45.                 }
  46.         }
  47.         //打印数组
  48.         public static void printArray(int[] arr){
  49.                 System.out.print("["+arr[0]+",");
  50.                 for(int i = 1; i < arr.length; i++){
  51.                         if( i != arr.length - 1){
  52.                                 System.out.print(arr[i]+",");
  53.                         }else{
  54.                                 System.out.print(arr[i]+"]");
  55.                         }
  56.                 }
  57.         }

  58. }
复制代码

作者: huyang936    时间: 2015-1-21 21:26
看看 呵呵
作者: qq306149769    时间: 2015-1-21 21:40
如果能调试,我能写出来,但是如果让我用笔直接写,我估计就完蛋了!
作者: 寻觅    时间: 2015-1-21 21:59
还可以再优化优化!
作者: 小棽    时间: 2015-1-22 16:21
寻觅 发表于 2015-1-21 21:59
还可以再优化优化!

怎么优化,是把置换代码提取出来吗?
作者: 秦文强    时间: 2015-1-22 20:43
这道题很经典
作者: da_chuan    时间: 2015-1-22 23:37
楼主其实还可以写一个插入排序的
作者: 以利亚    时间: 2015-1-23 09:40
面试题中会考这个吗?

作者: 周景新    时间: 2015-1-23 12:47
来看下。。。。
作者: Afridoce    时间: 2015-1-23 14:23
奋斗吧骚年!!!

作者: 默默地回忆    时间: 2015-1-23 21:51
努力学习,奔向就业班
作者: Mr.JUN    时间: 2015-1-23 21:58
小棽 发表于 2015-1-22 16:21
怎么优化,是把置换代码提取出来吗?

你的冒泡排序,那我就插入排序
  1. //描述插入排序
  2. public class InsertSort {
  3.         public static void main(String[] args) {
  4.                 int maxSize = 100;
  5.                 ArrayInsert arr = new ArrayInsert(maxSize);

  6.                 /*for (int i=9; i>0; i--) {
  7.                         arr.insert(i);
  8.                 }*/

  9.                 //插入100个0-100的随机数
  10.                 for (int i=0; i<maxSize; i++) {
  11.                         long n = (long) (Math.random()*(maxSize)+1);
  12.                         arr.insert(n);
  13.                 }

  14.                 long start = System.currentTimeMillis();
  15.                 System.out.println("排序前的数据: ");
  16.                 arr.display();

  17.                 arr.insertSort();
  18.                 System.out.println("排序后的数据: ");
  19.                 arr.display();

  20.                 long end = System.currentTimeMillis();
  21.                 System.out.println("spend time: " + (end-start));        //花费的时间
  22.         }
  23. }

  24. //封装数据的类
  25. class ArrayInsert {
  26.         private long[] arr;
  27.         private int nElems;

  28.         public ArrayInsert(int size) {
  29.                 arr = new long[size];
  30.                 nElems = 0;
  31.         }

  32.         //插入数据
  33.         public void insert(int value) {
  34.                 arr[nElems] = value;
  35.                 nElems ++;
  36.         }

  37.         public void display() {
  38.                 for (int i=0; i<nElems; i++) {
  39.                         System.out.print(arr[i] + " ");
  40.                 }
  41.                 System.out.println();
  42.         }

  43.         //插入排序
  44.         public void insertSort() {
  45.                 int in, out;

  46.                 for (out=1; out<nElems; out++) {
  47.                         long temp = arr[out];
  48.                         in = out;

  49.                         while(in>0 && arr[in-1]>temp) {
  50.                                 arr[in] = arr[in-1];        //右移一位
  51.                                 in --;
  52.                         }
  53.                         arr[in] = temp;                //插入数据
  54.                 }
  55.         }
  56. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2