黑马程序员技术交流社区

标题: 【记录】代码练习-排序 [打印本页]

作者: Kevin.Kang    时间: 2015-5-31 03:17
标题: 【记录】代码练习-排序
  1. public class ArrayDemo2{

  2.         //定义打印方法
  3.         public static void printArray (int [] arr)
  4.                 {
  5.                 System.out.print("[");
  6.                 for (int x=0; x<arr.length; x++)
  7.                         {
  8.                         if (x==arr.length-1)
  9.                         System.out.println(arr[x]+"]");
  10.                         else
  11.                         System.out.print(arr[x]+",");
  12.                         }
  13.                 }

  14.         //定义交换方法
  15.         public static void swap(int [] arr, int x, int y)
  16.                 {
  17.                                                 int temp = arr[x];
  18.                                                 arr[x] = arr[y];
  19.                                                 arr[y] = temp;
  20.                 }

  21.         public static void main (String args [])
  22.                 {
  23.                 int [] array = {33,2,45,14,25,47,78,12};
  24.                 printArray(array);
  25.                 bubbleSort_2(array);
  26.                 printArray(array);
  27.                 }
  28.                 /*
  29.                 需求:给数组arr{33,2,45,14,25,47,12,78}进行排序。

  30.                 思路:
  31.                 选择排序:
  32.                 1.排序需要进行比较,将数组中第一个元素跟其他剩余的进行比较
  33.                   取出最小的一个放置到第一个元素的位置,需要进行遍历
  34.                 2.然后再将数组中的剩余的元素以此进行比较。需要进行循环嵌套

  35.                 冒泡排序:
  36.                 1.需要将相邻的两个数进行比较,然后进行换位,小的在前,大的在后

  37.                 需要明确:
  38.                 1.有没有返回值,返回值的类型是什么
  39.                 2.未知的内容
  40.                 */

  41.                 //选择排序
  42.                 public static void selectSort(int [] arr)
  43.                         {
  44.                         for (int x=0; x<arr.length-1; x++)
  45.                                 {
  46.                                 for (int y=x+1; y<arr.length; y++)
  47.                                         {
  48.                                         if (arr[x]>arr[y])
  49.                                                 swap(arr,x,y);
  50.                                         }
  51.                                 }
  52.                         }

  53.                 //冒泡排序
  54.                 public static void bubbleSort(int [] arr)
  55.                         {
  56.                         for (int x=0; x<arr.length-1; x++)
  57.                                 {
  58.                                 for (int y=0; y<arr.length-1-x; y++)
  59.                 //-1是为了下面y+1越界,
  60.                                 //-x是为了随着外循环的增加,内循环减少循环元素
  61.                                         {
  62.                                         if (arr[y]>arr[y+1])
  63.                                                 swap(arr,y+1,y);
  64.                                         }
  65.                                 }
  66.                         }

  67.                 public static void bubbleSort_2(int [] arr)
  68.                         {
  69.                         for (int x=arr.length-1; x>0; x--)
  70.                                 {
  71.                                 for (int y=0; y<x; y++)
  72.                                         {
  73.                                         if (arr[y]>arr[y+1])
  74.                                                 swap(arr, y, y+1);
  75.                                         }
  76.                                 }
  77.                         }
  78. }
复制代码



作者: 武汉小菜鸟    时间: 2015-5-31 23:59
你的冒泡排序效率不高,因为当后面的数据以及有序时,就可以不用再遍历,你可以在循环的时候定义一个flag标记
作者: LoveMyself    时间: 2015-6-1 01:13
赞一个先
作者: Kevin.Kang    时间: 2015-6-1 11:27
武汉小菜鸟 发表于 2015-5-31 23:59
你的冒泡排序效率不高,因为当后面的数据以及有序时,就可以不用再遍历,你可以在循环的时候定义一个flag标 ...

请原谅我只是一个初学者。
作者: Kevin.Kang    时间: 2015-6-1 11:28
LoveMyself 发表于 2015-6-1 01:13
赞一个先

万分感谢
作者: 武汉小菜鸟    时间: 2015-6-1 16:54
Kevin.Kang 发表于 2015-6-1 11:27
请原谅我只是一个初学者。

你看,假如你要排序的数组已经完全是有序的,那你这个冒泡排序还用循环吗?岂不浪费资源
作者: 黑马生涯    时间: 2015-6-1 17:02
这个面食会问啊……
作者: Kevin.Kang    时间: 2015-6-2 09:39
武汉小菜鸟 发表于 2015-6-1 16:54
你看,假如你要排序的数组已经完全是有序的,那你这个冒泡排序还用循环吗?岂不浪费资源 ...

现在还没有考虑那么多,看过视频能够自己写的出来,我已经感觉很不错了。
作者: Kevin.Kang    时间: 2015-6-2 09:41
黑马生涯 发表于 2015-6-1 17:02
这个面食会问啊……

流程才到基础测试,离面试还有很遥远呢。
作者: 欧阳文    时间: 2015-6-2 09:58
赞一个.....
作者: 武汉小菜鸟    时间: 2015-6-2 09:59
Kevin.Kang 发表于 2015-6-2 09:39
现在还没有考虑那么多,看过视频能够自己写的出来,我已经感觉很不错了。 ...

恩恩,加油加油
作者: 李志鹏    时间: 2015-6-2 11:04
赞一个!




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