数据结构的特性(数据结构中除了数组之外都可以被认为是抽象数据结构)
数据结构 | 优点 | 缺点 |
数组 | 插入快,如果知道下标,可以非常快地存取 | 查找慢,删除慢,大小固定 |
有序数组 | 比无序的数组查找快 | 删除和插入慢,大小固定 |
栈 | 提供后进先出的存取 | 存取其他项很慢 |
队列 | 提供后进先出的存取 | 存取其他项很慢 |
链表 | 插入快,删除快 | 查找慢 |
二叉树 | 查找、插入、删除都快(如果树保持平衡) | 删除算法复杂 |
红黑树 | 查找、插入、删除都快。树总是平衡的。 | 算法复杂 |
2-3-4 树 | 查找、插入、删除都快。树总是平衡的。类似的树对磁盘存储有用 | 算法复杂 |
哈希表 | 如果关键字已知则存储极快。插入快 | 删除慢,如果不知道关键字则存取很慢,对存储空间使用不充分 |
堆 | 插入、删除快,对最大数据项的存取很快 | 对其他数据项存取慢 |
图 | 对现实世界建模 | 有些算法慢且复杂 |
1.冒泡排序(速度慢):
int[] in={20,80,75,23,56,24,11};
for(int i=in.length-1; i>=1;i--){
for(int j=0;j<i;j++){
if(in[j]>in[j+1]){
int s = in[j+1];
in[j+1] = in[j];
in[j] =s;
}
}
}
for(int ss=0;ss<in.length;ss++){
System.out.println("------------>"+in[ss]);
}
2.选择排序
for (int i = 0; i < in.length; i++) {
int temp = in[i];
int index = i;
for (int j = i + 1; j < in.length; j++) {
if (temp >in[j]) {
temp = in[j];
index = j;
}
}
in[index] = in[i];
in[i] = temp;
}
3.插入排序
int i, j, irt;// 要插入的数据
for (i = 1; i < in.length; i++) {
irt = in[i]; // 设置数组中的第2个元素为第一次循环要插入的数据
j = i - 1;
while (j >= 0 && irt < in[j]) { // 如果要插入的元素小于第j个元素,就将第j个元素向后移动
in[j + 1] = in[j];
j--;
}
in[j + 1] = irt; //将irt插入到数组中
}