Java数据结构与算法(2) - ch03排序(冒泡、插入和选择排序)
2024-10-18 20:21:47
排序需要掌握的有冒泡排序,插入排序和选择排序。时间为O(N*N)。
冒泡排序: 外层循环从后往前,内存循环从前往后到外层循环,相邻数组项两两比较,将较大的值后移。
插入排序: 从排序过程的中间开始(程序从第二个数组项开始a[1]),此时队列已经拍好了一部分。此时,将后边的数组项一次插入到已经排好序的部分队列中。
选择排序: 从第一个数组项开始,找到包括该数组项在内的所有往后数组项中的最小项与当前项进行交换,其实相当于依次将最小值往前冒泡。
示例代码:
package chap03.BubbleSort; // bubbleSort.java
// demonstrates bubble sort
// to run this program: C>java BubbleSortApp class ArrayBub {
private long[] a;
private int nElems; public ArrayBub(int max) {
a = new long[max];
nElems = 0;
} public void insert(long value) {
a[nElems] = value;
nElems++;
} public void display() {
for (int j = 0; j < nElems; j++) {
System.out.print(a[j] + " ");
}
System.out.println("");
} // 冒泡排序
public void bubbleSort() {
int out, in; for (out = nElems - 1; out > 1; out--) {
for (in = 0; in < out; in++) {
if (a[in] > a[in + 1]) {
swap(in, in + 1);
}
}
}
} // 插入排序
public void insertionSort() {
int in, out; // out is dividing line
for (out = 1; out < nElems; out++)
{
// remove marked item
long temp = a[out];
// start shifts at out
in = out;
while (in > 0 && a[in - 1] >= temp) {
a[in] = a[in - 1];
--in;
}
a[in] = temp;
}
} // 选择排序
public void selectionSort() {
int out, in, min; for (out = 0; out < nElems - 1; out++) {
min = out;
for (in = out + 1; in < nElems; in++) {
if (a[in] < a[min]) {
min = in;
}
}
swap(out, min);
}
} private void swap(int one, int two) {
long temp = a[one];
a[one] = a[two];
a[two] = temp;
}
} class BubbleSortApp {
public static void main(String[] args) {
int maxSize = 100;
ArrayBub arr;
arr = new ArrayBub(maxSize); arr.insert(77);
arr.insert(99);
arr.insert(44);
arr.insert(55);
arr.insert(22);
arr.insert(88);
arr.insert(11);
arr.insert(00);
arr.insert(66);
arr.insert(33); arr.display(); arr.bubbleSort(); arr.display();
}
}
最新文章
- Bucket不为空,请检查该Bucket是否包含未删除的Object或者未成功的Multipart碎片
- Java中getResourceAsStream的用法
- git版本控制管理实践-4
- Silverlight5 Tools安装失败及解决方案
- Win32 多线程学习笔记
- [iOS翻译]《iOS7 by Tutorials》系列:在Xcode 5里使用单元测试(下)
- 清除Cookie、获取指定Cookie的值、添加一个Cookie(24小时过期)、添加一个Cookie
- C# Process打开程序并移动窗口到指定位置
- bzoj4637: 期望
- Teamwork——Week4 团队分工和预估项目时间
- StirngUtil工具类 之 邮箱注冊 域名不区分大写和小写方法
- Html禁止粘贴 复制 剪切
- swift字典集合-备
- Android动态布局,并动态为TextView控件设置drawableLeft、drawableRight等属性加入图标
- Linux显示按文件大小降序排列
- myeclipse中配置自己安装的Tomcat
- 关于 redis.properties配置文件及rule
- vue获取当前元素
- 使用electron搭建桌面app的简便方法
- MySQL、MongoDB、Redis 数据库之间的区别
热门文章
- linux 下一个 osw先从操作系统和标准脚本主动发起
- hdu 2767 Proving Equivalences 强连通缩点
- iOS_18_开关控制器_NavigationController_push道路_数据传输
- iOS_17_控制开关_TabBarController_由storyboard道路
- Jafka来源分析——Processor
- SQLSERVER PRINT语句的换行
- c++内存泄漏处理(积累)
- Vim经常使用技巧总结1
- Android异步载入全解析之IntentService
- JS它DOM