1.冒泡排序
冒泡排序核心思想:
比较两个元素,如果前一个比后一个大则进行交换。经过对每个元素的比较,最后将最大的元素设置成最后一个元素。重复该操作,最后形成从小到大的排序。
深究:
2.选择排序
选择排序的核心思想:
扫描所有元素,得到最小的元素,并将最小的元素与左边第一个元素进行交换。再次扫描除第一位置的所有元素,得到最小的元素,与左边第二个元素进行交换。以此推类。
测试:
结果:
12 123 34 5 9 345
5 9 12 34 123 345
3.直接插入排序
核心思想:
原理:将数组分为无序区和有序区两个区,然后不断将无序区的第一个元素按大小顺序插入到有序区中去,最终将所有无序区元素都移动到有序区完成排序。
要点:设立哨兵,作为临时存储和判断数组边界之用。
具体算法描述如下:
第一趟比较前两个数,然后把第二个数按大小插入到有序表中; 第二趟把第三个数据与前两个数从前向后扫描,把第三个数按大小插入到有序表中;依次进行下去,进行了(n-1)趟扫描以后就完成了整个排序过程。
插入排序的基本方法是:每步将一个待排序的记录按其关键字的大小插到前面已经排序的序列中的适当位置,直到全部记录插入完毕为止。
4.快速排序
快速排序
原理:不断寻找一个序列的中点,然后对中点左右的序列递归的进行排序,直至全部序列排序完成,使用了分治的思想。
要点:递归、分治
如下所示是一个快速排序的完整例子:
23 13 35 6 19 50 28
[19 13 6] 23 [35 50 28]
[6 13] 19 23 [28] 35 [50]
6 [13] 19 23 28 35 50
6 13 19 23 28 35 50
实现:
5.归并排序
原理:将原序列划分为有序的两个序列,然后利用归并算法进行合并,合并之后即为有序序列。
要点:归并、分治
归并排序的执行过程:(*是拆分,#是合并)
8 3 2 6 7 1 5 4
*8 3 2 6* *7 1 5 4*
*8 3* *2 6* *7 1* *5 4*
*8* *3* *2* *6* *7* *1* *5* *4*
#3 8# #2 6# #1 7# #4 5#
#2 3 6 8# #1 4 5 7#
1 2 3 4 5 6 7 8
实现:
6.对象排序(面向对象语言特有)
对实际的类的对象进行排序的过程
Student.java:
操作类:
测试类:
结果:
学号:54321姓名:张三 年龄:24 性别:男
学号:52341姓名:李四 年龄:21 性别:男
学号:54564姓名:王五 年龄:20 性别:男
学号:59874姓名:枣儿 年龄:21 性别:女
学号:52341姓名:李四 年龄:21 性别:男
学号:54321姓名:张三 年龄:24 性别:男
学号:54564姓名:王五 年龄:20 性别:男
学号:59874姓名:枣儿 年龄:21 性别:女
学号:54321姓名:张三 年龄:24 性别:男
学号:52341姓名:李四 年龄:21 性别:男
学号:59874姓名:枣儿 年龄:21 性别:女
学号:54564姓名:王五 年龄:20 性别:男
学号:54564姓名:王五 年龄:20 性别:男
学号:52341姓名:李四 年龄:21 性别:男
学号:59874姓名:枣儿 年龄:21 性别:女
学号:54321姓名:张三 年龄:24 性别:男