选择排序
原理:选择最小的元素并,将它和第一个位置上的元素交换。然后从,data[1],...data[n-1]中的元素,并将它放到第二个位置。
public static void selectionSort(int[] data)
{
int i, j;
int least;
int temp;
for (i = 0; i < data.length-1; i++)
{
for (j = i+1,least = i; j < data.length; j++)
{
if (data[j] < data[least])
{
least = j;
}
}
temp = data[i];
data[i]=data[least];
data[least]=temp;
}
for (i = 0; i < data.length; i++)
{
System.out.println("data[" + i + "]=" + data[i]);
}
}
节约了交换的次数。
插入排序
原理:从数组的前两个元素data[0]和data[1]着手。次序不对就进行交换
然后,扩展到前三个元素比较。data[1]和data[2]比较,交换位置。
public static void insertionSort(int[] data)
{
int temp;
int i, j;
for (i = 1; i < data.length; i++)
{
temp = data[i];
/*for (j = i; j > 0&&temp<data[j-1]; j--)
{
data[j] = data[j - 1];
}*/
for (j = i; j > 0; j--)
{
if(temp<data[j-1]){
data[j] = data[j - 1];
}else{
break;
}
}
data[j] = temp;
}
for (i = 0; i < data.length; i++)
{
System.out.println("data["+i+"]="+data[i]);
}
}
对于随机的数组,它的移动和比较此时更接近最坏情况。当数组的大小翻番,工作量是原来的四倍。
起泡排序
原理:自底向上扫描数组,如果找到相邻的两个元素顺序不对,将它们交换。最小的元素像气泡一样浮到数组的顶部。
public static void bubbleSort(int[] data){
int i,j;
int swap;
for(i=0;i<data.length;i++){
for(j=data.length-1;j>i;j--){
if(data[j]<data[j-1]){
swap = data[j];
data[j] = data[j-1];
data[j-1] = swap;
}
}
}
for (i = 0; i < data.length; i++)
{
System.out.println("data[" + i + "]=" + data[i]);
}
}
需要和数组的每个元素都执行交换,而不像选择排序可以跳过它们。
平均情况,起泡的比较次数是插入的两倍,和选择排序相同;移动次数和插入排序相同,是选择的n倍。
希尔排序
static void shellSort(int[] data)
{
int i, j, k, h, hCnt, increments[] = new int[20];
int temp;
for (h = 1, i = 0; h < data.length; i++)
{
increments[i] = h;
h = 3 * h + 1;
}
for (i--; i >= 0; i--)
{
h = increments[i];
for (hCnt = h; hCnt < 2 * h; hCnt++)
{
for (j=hCnt;j<data.length;)
{
temp = data[j];
k = j;
while(k-h>=0&&temp<data[k-h]){
data[k]=data[k-h];
k-=h;
}
data[k]=temp;
j+=h;
}
}
}
for (i = 0; i < data.length; i++)
{
System.out.println("data["+i+"]="+data[i]);
}
}
分享到:
相关推荐
### JAVA 抽奖算法 #### 算法概述 该JAVA抽奖算法主要通过定义一系列奖品的概率,并基于这些概率计算出具体的抽奖结果。算法能够处理不同数量和不同概率分布的奖品,使得整个抽奖过程更加灵活多变。下面将详细介绍...
在本文中,我们将探讨如何使用DFA(有穷自动机)算法在Java中实现敏感词过滤功能。敏感词过滤在许多应用程序中都是必要的,例如社交媒体、论坛或博客平台,以防止用户发布不当或有害的内容。以下是对DFA算法及其在...
本资源总结了39道经典的 JAVA 算法面试题目,每个题目都附带答案,涵盖了常见的算法问题,旨在帮助读者更好地掌握 JAVA 编程语言和算法设计。 算法概述 算法是计算机科学中最重要的组成部分,指的是解决特定问题的...
JAVA实现扫描线算法的知识点总结 扫描线算法是计算机图形学中的一种常用算法,用于实现多边形的扫描线填充。下面是JAVA实现扫描线算法的知识点总结: 1. 扫描线算法的基本概念: 扫描线算法是从Ymin开始扫描,...
总结来说,这个项目通过Java实现了多种图像去噪算法,涵盖了光斑、雾、暗部以及水印的去除,对于提升图像质量有着显著效果。开发者可以通过学习和利用这个SDK,进一步提升他们的图像处理应用的功能和用户体验。
在 Java 中,实现常见算法是非常重要的,以下是关于链表、约瑟环问题、单链表反转、最大子序列和问题、最大公因数、判断两个数组中是否有相同的数字、字符串反转等知识点的总结。 判断链表是否为循环链表 判断链表...
本人总结了一些对称的加密算法,希望可以给一些朋友带来帮助!!
《Java 基础核心总结》 Java 概述 什么是 Java2 Java 的特点Java 开发环境 JDK JRE Java 开发环境配置 Java 基本语法 数据类型基础语法运算符 Java 执行控制流程条件语句 if 条件语句 if...else 条件语句if...else ...
Java实现银行家算法(GUI界面)A+报告 银行家算法是操作系统中避免死锁的一种经典算法,由Dijkstra提出。该算法可以有效地避免操作系统中出现死锁的问题。本文将详细介绍如何使用银行家算法来处理操作系统给进程分配...
总结来说,这个项目展示了如何使用Java和Apache POI处理Excel数据,并实现Apriori算法来发现数据中的关联规则。通过理解并优化这个实现,我们可以为其他类似问题提供解决方案,比如市场分析、用户行为研究等。
根据给定的文件信息,我们可以总结出以下关于Java经典算法的知识点: ### 1. 斐波那契数列 斐波那契数列是一种典型的递归算法应用,数列的每一项都是前两项的和。在代码示例中,通过递归函数`f(int x)`实现了...
本文总结了 17 道 Java 面试经典算法题目,并对每道题目进行了详细的分析和解释。 1. 兔子繁殖问题:该题目考查了递归算法的设计和实现能力。兔子的繁殖规律可以用数列 1,1,2,3,5,8,13,21... 表示,通过编程实现这...
本资源总结了Java程序设计算法竞赛题目,涵盖了三个问题: Problem1 排序算法、Problem2 停车场问题和Problem3 控制程序。每个问题都提供了详细的描述、输入和输出示例,以便更好地理解和实现算法。 Problem1 排序...
总结来说,Java银行家算法是一个用于预防操作系统中死锁的策略,它通过预分配和安全性检查确保系统不会进入不可恢复的状态。结合界面的实现,这个项目为学习者提供了一个动态的学习环境,帮助他们更好地掌握资源管理...
总结来说,这个Java作业调度软件通过实现FCFS、SJF和HRRN算法,为理解和实践操作系统的任务调度提供了实例。尽管作为课程作业可能存在一些瑕疵,但它可以帮助开发者深入理解这些经典算法的原理,并为构建更复杂的...
Java 算法面试知识点总结 本文总结了 Java 算法面试中的常见知识点,并提供了相关的代码示例。以下是本文中所涉及到的知识点: 1. 字符串分割算法 在 Java 中,字符串分割算法是非常常见的面试题之一。本文中提供...
### Java自定义加密算法知识点详解 #### 一、概述 在信息安全领域,数据加密是保护数据安全的重要手段之一。本文将详细介绍一个Java实现的自定义加密算法案例,该算法通过组合数字、小写字母、大写字母以及特殊...
对称加密算法包括了多种算法,本文主要介绍DES、3DES和AES这三种常见的对称加密算法,并对它们进行Java实现的总结。 首先,对称加密算法的一个关键优势在于其算法公开、计算量小、加密速度快、加密效率高,但它们也...