这里主要对8种排序算法做个总结,分别是插入排序,选择排序,冒泡排序,希尔排序,归并排序,堆排序,快速排序以及基数排序。
1、 插入排序
比较和交换的时间复杂度为O(n^2),算法自适应,对于数据已基本有序的情况,时间复杂度为O(n),算法稳定,开销很低,适合于数据已基本有序或者数据量小的情况。
public void insertionSort() {// 插入排序
int out, in;
int count1 = 0, count2 = 0;// 复制次数,比较次数
for (out = 1; out < nElems; out++) {
long temp = a[out];
in = out;
boolean flag=in>0&&a[in-1]>=temp;
while(flag){
if(a[in-1]>=temp){
if(in>0){
a[in]=a[in-1];
count1++;
--in;
}
}
count2++;
flag=in>0&&a[in-1]>=temp;
}
a[in] = temp;
}
System.out.println("复制次数为:" + count1 + " 比较次数为:" + count2);
}
2、 选择排序
算法不稳定,O(1)的额外的空间,比较的时间复杂度为O(n^2),交换的时间复杂度为O(n),并不是自适应的。在大多数情况下都不推荐使用。只有在希望减少交换次数的情况下可以用。
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);
}
}
}
3、 冒泡排序
算法稳定,O(1)的额外的空间,比较和交换的时间复杂度都是O(n^2),自适应,对于已基本排序的算法,时间复杂度为O(n)。冒泡算法的许多性质和插入算法相似,但对于系统开销高一点点。
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);
}
}
}
}
分享到:
相关推荐
First Fit算法是一种常用的启发式策略,用于解决这类问题。在这个Java实现中,我们探讨如何利用First Fit算法有效地解决3D装箱问题。 First Fit算法的基本思想是将每个3D物体按照其尺寸顺序尝试放入已有的箱子中,...
"Best Fit"算法是一种常见的启发式策略,用于解决这类问题。下面我们将详细探讨Best Fit算法的原理以及其在Java中的实现。 **Best Fit算法简介** Best Fit算法的基本思想是在每次放入新物体时,选择当前已有的箱子...
这些算法包括但不限于排序算法、搜索算法、图算法、动态规划、字符串处理、数学运算等。掌握这些算法是参赛者的基本要求。 知识点三:算法实现 算法实现是指将算法思想转化为具体编程语言的过程。为了在ACM-ICPC中...
排序算法有冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序等多种,每种都有其适用场景和效率特点。查找算法包括线性查找、二分查找、哈希查找等,其中二分查找通常在有序数组中使用,哈希查找提供近乎...
示例代码:以下是一个基于Java的简单排序算法实现: ```java public class SortExample { public static void main(String[] args) { int[] array = {5, 3, 8, 4, 2}; for (int i = 0; i < array.length - 1; ...
这种模板通常会包含常用的算法和数据结构代码,如排序算法、搜索算法、动态规划、图论算法等。 6. 编程语言支持:通常ACM模板会支持一种或多种编程语言,如C、C++或Java。由于这些模板是为了竞赛而准备,它们一般会...
常见的算法类型包括排序算法(如快速排序、冒泡排序)、搜索算法(如二分查找、深度优先搜索)等。 - **复杂度分析**:算法的性能通常用时间复杂度和空间复杂度来衡量。时间复杂度表示算法执行所需的时间随着输入...
1. 算法基础知识:ACM竞赛中会涉及到许多基础算法的知识,包括但不限于数据结构(如数组、链表、栈、队列、树、图等),基本算法(排序算法、搜索算法等),以及复杂度分析(时间复杂度和空间复杂度的分析方法)。...
它包括基本的排序和搜索算法(如冒泡排序、快速排序、二分查找等),以及更复杂的算法思想,如分治法、动态规划、贪心算法等。 2. 数据结构:算法效率往往依赖于所使用数据结构的特性,如数组、链表、栈、队列、树...
- 编程语言:熟练使用至少一种编程语言,如C++、Java或Python。 - 模拟训练:通过在线平台(如Codeforces、LeetCode)进行题目训练。 - 团队协作:提高团队沟通和协作能力,合理分工。 4. 竞赛过程中的策略 - ...
- **数据结构与算法**:掌握常用的数据结构(如数组、链表、树等)和算法(排序、搜索等),这对于编写高效的代码至关重要。 - **操作系统基础**:了解操作系统的基本工作原理及常见的操作系统类型。 #### 二、Java...
- **常见算法**: 排序算法(如快速排序、归并排序)、查找算法(如二分查找)等。 **2.2 网络通信** - **网络协议**: TCP/IP模型、HTTP、FTP、SMTP等。 - **无线通信技术**: Wi-Fi、蓝牙、NFC、Zigbee等。 - **网络编程...
- **RowKey优化**:可通过哈希化RowKey实现数据更均匀分布,但可能会影响排序性能。 - **ColumnQualifier的使用**:可用于存储额外信息,但需注意名称长度以减少I/O开销。 #### 三、Java API注意事项 **1. HTable...