一天一个Java基础——排序

一天一个系列的第一篇,看看自己能否坚持下去,加油!

冒泡排序与快速排序

冒泡排序,人生中第一次面试,nice的考官问我能不能默写下来

快速排序,感觉高大上,分治思想,必学

 1 package One;
 2
 3 public class Test_sort {
 4
 5     public static void main(String[] args) {
 6         int[] a = { 2, 9, 5, 4, 8, 1 };
 7         // sort(bubble_sort);
 8         quick_sort(a, 0, a.length - 1);
 9         for (int i = 0; i < a.length; i++) {
10             System.out.print(a[i] + " ");
11         }
12     }
13
14     // 冒泡排序
15     public static int[] bubble_sort(int[] a) {
16         // 设置判断,进行优化
17         // 如果某次遍历中没有发生交换,那么就不用再进行下去,因为排序已完成
18         boolean ac = true;
19         for (int k = 1; k < a.length & ac; k++) {
20             ac = false;
21             for (int i = 0; i < a.length - 1; i++) {
22                 if (a[i] > a[i + 1]) {
23                     int temp = a[i];
24                     a[i] = a[i + 1];
25                     a[i + 1] = temp;
26                     ac = true;
27                 }
28             }
29         }
30         return a;
31     }
32
33     // 快速排序
34     public static int[] quick_sort(int s[], int l, int r) {
35         if (l < r) {
36             // Swap(s[l], s[(l + r) / 2]); //将中间的这个数和第一个数交换 参见注1
37             int i = l, j = r, x = s[l];
38             while (i < j) {
39                 // 从右向左找第一个小于x的数
40                 while (i < j && s[j] >= x)
41                     j--;
42                 if (i < j)
43                     s[i++] = s[j];
44
45                 // 从左向右找第一个大于等于x的数
46                 while (i < j && s[i] < x)
47                     i++;
48                 if (i < j)
49                     s[j--] = s[i];
50             }
51             s[i] = x;
52             quick_sort(s, l, i - 1); // 递归调用 从右至左
53             quick_sort(s, i + 1, r); // 从左至右
54         }
55         return s;
56     }
57 }
时间: 2024-10-10 11:10:21

一天一个Java基础——排序的相关文章

一个Java基础练习

com聚合是包容的一种特例,目的是最大化的实现功能模块话,降低组件间的耦合性. 第一步: 通过ATL创建com外部组件TestOutCom.dll,在其内部创建接口包装类CCMyOuterCom,并实现其对应的接口ICMyOuterCom,注意默认选择"聚合"(这点很重要,后面我们会详细解说) 在"聚合"选项中: 勾选"是",则按照默认生成支持聚合的包装类 勾选"否",则包装类头文件CMyOuterCom.h,在公开接口列表字

一天一个Java基础——泛型

这学期的新课——设计模式,由我仰慕已久的老师传授,可惜思维过快,第一节就被老师挑中上去敲代码,自此在心里烙下了阴影,都是Java基础欠下的债 这学期的新课——算法设计与分析,虽老师不爱与同学互动式的讲课,但老师讲的挺好,不过由于数据结构欠缺课听的有点烧脑,都是数据结构欠下的债 这学期的新课——英语口语,虽外教老师风骚逗趣浪荡不羁爱自由,但我辈词汇量欠缺,表明淡定说yeah,但心中一万匹草泥马策马奔腾,都是英语欠下的债 1.泛型类 实体类(容器类),经常重用的类,下面是一个没有用泛型的实体类: 1

一天一个Java基础——数组

一天一个变成了几天一个,最近接受的新东西太多.太快,有好多需要blog的但没有时间,这些基础知识应该是要深挖并好好研究的,不应该每次都草草了事,只看个皮毛. 数组: JVM将数组存储在一个称为堆(heap)的内存区域中,堆用于动态内存分配,在堆中内存块可以按随意的顺序分配和释放 1.int[] a; ——表示声明一个数组(也可写为 int a[];) 声明一个数组变量时并不在内存中给数组分配任何空间,只是创建一个对数组的引用的存储位置 如果变量不包含对数组的引用,那么这个变量的值为null 通过

一天一个Java基础——对象和类

1.在Java中你所做的全部工作就是定义类,产生那些类的对象,以及发送消息给这些对象 2.可以在类中设置两种类型的元素:字段(也被称作数据成员)和方法(也被称作成员函数) 3.字段可以是任何类型的对象,可以通过其引用与其进行通信:也可以是基本类型中的一种.如果字段是对某个对象的引用,那么必须初始化该引用,以便使其与一个实际的对象向关联(使用new来实现) 4.可以把两个类放在同一个文件中,但是文件中只能有一个类是公共的.此外,公共类必须与文件同名 1.1 构造方法构造对象 构造方法是一种特殊的方

一天一个Java基础——反射

1.概念 反射主要是指程序可以访问,检测和修改它本身的状态或行为的一种能力 Java中的反射是一种强大的工具,它能够创建灵活的代码,这些代码可以运行时装配,无须在组件之间进行链接 反射允许在编写与执行时,使程序代码能够接入装载到JVM中的类的内部信息,而不是源代码中选定的类协作的代码 如果使用不当,反射的成本会很高 2.例子 1 package Test; 2 3 import java.lang.reflect.Constructor; 4 import java.lang.reflect.F

一天一个Java基础——通过异常处理错误

<Thinking in Java>上对这章的讲解不少,可见重要性,学习和总结一些主要的记录下来. 一.创建自定义异常 1 package Exception; 2 3 class SimpleException extends Exception{} 4 5 public class InheritingException{ 6 7 public void f() throws SimpleException { 8 System.out.println("Throw Simple

一天一个Java基础——序列化

1.概念 Java的“对象序列化”能将一个实现了Serializable接口的对象转换成一组byte,这样日后要用这个对象的时候,能把这些byte数据恢复出来,并据此重新构建那个对象. 对象序列化能实现“轻量级persistence(lightweight persistence)”.所谓persistence,是指对象的生命周期不是由程序是否运行决定的,在程序的两次调用之间对象仍然还活着.通过“将做过序列化处理的对象写入磁盘,等到程序再次运行的时候再把它读出来”,可以达到persistence

java基础-排序

冒泡排序 选择排序 生成数组,数组元素值为1-1000

每天一个java基础知识--

内存总体一共分为了 4个部分(stack segment.heap segment.code segment.data segment) 当我们在程序中,申明一个局部变量的时候,此变量就存放在了 stack segment(栈)当中: 当new 一个对象的时候,此对象放在了heap segment(堆)当中: 而static 的变量或者字符串常量 则存在在 data segment(数据区)中: 那么类中方法的话,是存在在 code segment(代码区)中了. 今天面试被问到了一个问题: 为