排序
1.定义:
所谓排序,即是整理文件中的内容,使其按照关键字递增或递减的顺序进行排列。
输入:n个记录,n1,n2……,其对应1的关键字为k1,k2……
输出:n(i1),n(i2)……,使得k(i1)<=k(i2)……
(形象点讲就是排排坐,调座位,高在前低在后;或者低在前高在后)
2.排序算法的评价的专业术语
(1)稳定性
稳定:在排序的文件中,若存在多个关键字相同的记录,经过排序后,这些具有相同
关键字的记录之间的相对顺序不会发生改变。
不稳定:若具有相同关键字记录之间的相对次序发生改变,则成为不稳定的排序算法。
(2)复杂度
时间复杂度:一个算法执行所需消耗的时间。
空间复杂度:运行完该程序所需要的内存大小
(3)排序方式
内排序:在排序过程中,整个文件放在内存中进行处理,不涉及数据的内外存交换。
(适用于记录个数不是很多的小文件)
外排序:排序过程中要进行数据的内、外存交换。
(适用于记录个数多,不能将其一次性放入内存中的大文件)
交换排序
思想:对排序记录的关键字进行两两比较,发现次序相反时则进行交换直至没有次序相反的记录。
主要排序方法:冒泡排序、选择排序
冒泡排序
(1)算法描述:
冒泡排序是一种简单的排序,每次访问要排序的数组序列,一次比较相邻两个元素的大小,
若顺序错误就进行交换。(这个方法名的由来是小的元素慢慢“浮”在数组顶端,也可称为沉底(大的元素))
(2)算法的实现
a.比较相邻的两个元素大小,如果第一个大于第二个元素的大小就进行交换
b.对每一对相邻的元素都进行同样的操作,从第一对到最后一对,经过此步骤
最大的元素将是最后的元素。
c.针对所有的元素重复上述操作,除过最后一个。
d.重复a-c步骤,直至排序完成
![]()
1 /**
2 *@Description: 排序算法
3 *@Author: dyy
4 */
5 public class Sort {
6 public static void main(String[] args) {
7 int [] arr = new int[]{4,2,1,6,3,6,0,-5,1,1};
8 bubbleSort(arr);
9 //遍历打印排序后的数组
10 for(int i = 0; i < arr.length;i++){
11 System.out.print(arr[i]+" ");
12 }
13 }
14 /**
15 *冒泡排序
16 * @date: 2018/8/15 11:27
17 */
18 public static void bubbleSort(int[] array){
19 //对数组进行临界判断
20 if(array==null||array.length==0){
21 System.out.println("array is NULL");
22 }
23 for(int i = 0; i < array.length - 1; i++){
24 //进行相邻元素额大小比较(也可循环至array.length-1,
25 // 循环至array.length-i-1是因为没经过一圈的排序后面的元素则就是有序的)
26 for(int j = 0;j < array.length-i-1;j++){
27 if(array[j]>array[j+1]){
28 swap(array,j,j+1);
29 }
30 }
31 }
32 }
33 /**
34 *实现数组中两个数的交换
35 * target为要交换的数组,x,y为要交换数字的下标
36 * @date: 2018/8/15 11:30
37 */
38 public static void swap(int[] target,int x,int y){
39 int temp = target[x];
40 target[x] = target[y];
41 target[y] = temp;
42 }
43 }
View Code