java中基本的数据结构和排序
数据结构
- 编程的本质是对数据(信息以数据的形式存在),实际编
- 程中不得不处理大量的数据,因此实际动手编程之前必须分析这些数据,处理数据之间的关系
- 现实的数据元素之间之间有着纷繁复杂的逻辑关系,需要采用的是物理结构来存储这些数据并以这些数据基础对数据进行相应的操作。同时还要在分析这些数据在空间时间的开销优势。
- 对于专门研究应用程序中的数据之间逻辑关系,存储方式及其操作就是数据结构。
逻辑结构
- 数据结构元素之间存在关联关系被称为数据结构的逻辑结构,应用程序的数据结构大致有四种基本逻辑结构:
- 集合:数据集元素之间只存在同数据一个集合的关系
- 线性关系 数据元素之间存在一个对应一个的关系
- 树状结构:数据元素之间存在一个对多个的关系
- 图状结构或者网状结构:数据元素之间存在多个对多个的关系
排序算法
-
排序算法的目的:通常来说排序的目的就是快速查找
-
衡量排序算法的优劣
- 时间复杂度:分析关键字比较次数和记录的移动次数
- 空间复杂度:分析排序算法中需要多少辅助内存
- 稳定性 若两个记录A和B的关键字相等,但是排序后A,B的先后次序保存不变,则这算法是稳定的
-
常用的排序算法
- 选择排序:直接选择排序,堆排序
- 交换排序:冒泡排序,快速排序
- 插入排序:直接插入排序 ,折半排序 ,shell排序
- 并归排序: 桐式排序 基数排序
-
java中排序工具类:Arrays.sort();
-
基本算法实现
- 选择排序:要排序的一组数据中,选出最小的一个数与第一个数的位置进行比较交换,然后再剩下的数当中再找最小的与第二的位置进行交换位置,如此循环倒数第二个和最后一个进行比较
public static void selectSort(int[] arr){
for(int i = 0; i < arr.length; i++){
int k = i;//待确定的位置
for(int j = arr.length-1; j > i; j--){
if(arr[j] < arr[k]){
k = j;//记录第i个最小值位置
}
}
//将第i个位置的元素与此轮找到最小的值交换
int temp = arr[i];
arr[i] = arr[k];
arr[k] = temp;
}
}
- 冒泡排序:比较相邻两个元素的大小,如果后一个元素比前一个元素小,则交换两个元素的位置。一轮之后最大的元素会沉到底部。小的元素会逐渐往上浮,故称为冒泡排序
public static void bubbleSort(int[] arr){
int temp = 0; //起始比较位置
int size = arr.length; //数组的元素个数
for(int i = 0; j < size-1; i++){//外层控制轮次
for(int j = 0; j < size-1-j; j++){//内层进行比较
if(arr[j] > a[j+1]){
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
- 插入排序:每步将一个待排序的记录,按其顺序码大小插入到前面已经排序的字序列的合适位置(从后向前找到合适位置后),知道全部插入排序完为止
public static void insertSort(int[] arr){
int size = arr.length;
int temp = 0;
int j = 0;
for(int i = 0; i < size; i++){
temp = arr[i];
//假如temp比前面的值小,则将前面的值后移
for(j = i; j > 0 && temp < arr[j-1]; j--){
arr[j] = arr[j-1];
}
arr[j] = temp;
}
}