package com.beyondlife.demo2;
/*
* 这个类拥有三个静态方法用于数组排序
*
*/
public class NumberSort {
public static final int ASC = 1; //升序排列
public static final int DES = 2; //降序排列
/*冒泡排序
* 算法设计:此算法利用前后的元素大小进行比较,交换位置;
* 要实现整个数组的排序需要使用外循环来控制遍历次数;
* 内循环来控制前后两元素的比较次数,一次内循环之后可以找出最大的或最小的放在右边.
*
*/
public static void bubbleSort(int list[],int type){
int length = list.length;//数组的数据个数
int flag = 1; //标志位,判断此数组本身是否已经有序
int temp = 0; //中间数据,用于位置替换
int i = 0; //用于循环次数
int j = 0; //用于比较次数
if(type == ASC){ //升序排序
flag = 1;
for(i = 1;i < length && flag == 1;i++){ //控制循环次数
flag = 0;
for(j = 0;j < length - i;j++){ //控制比较次数
if(list[j] > list[j+1]){
temp = list[j];
list[j] = list[j + 1];
list[j + 1] = temp;
flag = 1; //修改标志位
}//end if
}//end inner for
}//end outter for
}else if(type == DES){ //降序排序
flag = 1;
for(i = 1;i < length && flag == 1;i++){ //控制循环次数
for(j = i + 1;j < length - i;j++){ //控制比较次数
if(list[j] < list[j+1]){
temp = list[j];
list[j] = list[j + 1];
list[j + 1] = temp;
flag = 1; //修改标志位
}//end if
}//end inner for
}//end outter for
}
}
/*选择排序
* 算法设计:选择排序不需要每比较两个元素就交换两其位置,
* 而是每次扫描一遍数据找出最大或最小的元素把其与左边排好序的元素的下一元素交换位置
*
*/
public static void selectSort(int list[],int type){
int length = list.length; //数组的元素个数
int pos = 0; //最大或最小元素的位置
int i = 0; //控制循环的次数
int j = 0; //用于查找元素的位置
int temp = 0; //用于临时交换位置的元素
if(type == ASC){//升序排序
for(i = 0;i < length ;i++){
pos = i;
for(j = i + 1;j < length;j++){
if(list[j] < list[pos])//查找未排序部分的最小元素
pos = j;
}//end inner for
if(pos != i){
temp = list[i];
list[i] = list[pos];
list[pos] = temp;
}
}//end outer for
}else if(type == DES){//降序排序
for(i = 0;i < length ;i++){
pos = i;
for(j = i + 1;j < length;j++){
if(list[j] > list[pos])//查找未排序部分的最大元素
pos = j;
}//end inner for
if(pos != i){
temp = list[i];
list[i] = list[pos];
list[pos] = temp;
}
}//end outer for
}
}
/*插入排序
*算法设计:此算法也是局部有序的,这里假设左边有序,
*那么现在需要把有序的下一个元素插入到有序的一端,
*这样需要移动有序的一端使空出合适的位置给插入原素
*/
public static void insertSort(int list[],int type){
int length = list.length; //数组的元素个数
int i = 0; //控制循环的次数
int j = 0; //用于定位元素
int temp = 0; //用于临时交换位置的元素
if(type == ASC){//升序排序
for(i = 1;i < length;i++){ //控制循环次数
j = i;
temp = list[i];
while(j > 0 && list[j - 1] > temp){//找到插入的位置
list[j] = list[j-1]; //比插入元素大的元素须向后移动
j--;
}
list[j] = temp; //插入元素
}//end for
}else if(type == DES){
for(i = 1;i < length;i++){ //控制循环次数
j = i;
temp = list[i];
while(j > 0 && list[j - 1] < temp){//找到插入的位置
list[j] = list[j-1]; //比插入元素小的元素须向后移动
j--;
}
list[j] = temp; //插入元素
}//end for
}
}
}
分享到:
相关推荐
标题中的“DHT21 LED数码管显示(三种数据处理方法)”指的是一个项目,它使用DHT21温湿度传感器获取数据,并通过LED数码管显示这些数据。DHT21是一款集成的数字温湿度传感器,它能提供精确且稳定的温度和湿度测量值...
本资源聚焦于使用C语言实现五种基本的排序方法,这些方法是算法学习的基础,对于理解和提升编程能力至关重要。 1. 冒泡排序(Bubble Sort) 冒泡排序是最简单的排序算法之一,它通过不断地比较相邻元素并交换位置,...
在编程领域,数组排序是基础且重要的操作,尤其在数据处理和分析中。这个项目的目标是创建一个一维数组排序程序,它具有灵活性,能够处理不同来源的数据,并提供三种经典的排序算法供用户选择:冒泡排序、选择排序和...
在水下地形测量数据处理领域中,插值方法是处理不完整数据或提高数据精度的重要技术手段之一。本文探讨了三种插值方法——拉格朗日插值、牛顿插值以及三次样条插值,并在实际应用中对它们进行了比较分析。为了满足...
随着三维激光扫描技术在各行各业的普及,相关研究和应用不断拓展,对于相关领域的专业人员而言,理解三维激光扫描点云数据处理及建模的基本原理和流程是基础能力之一。随着技术的进步和创新,未来的三维建模和点云...
"玻尔兹曼常数实验数据处理方法" 玻尔兹曼常数是一种重要的物理常数,反映物质世界的不连续特性。精确测量玻尔兹曼常数具有十分重要的意义。本文通过PN结的电流电压特性关系,采用线性回归、乘幂回归、指数回归三种...
本文主要探讨了三种内插和拟合方法在数据处理中的应用,特别是针对人造卫星位置计算的情况。 首先,拉格朗日插值是一种经典的方法,它通过构建一个多阶多项式来精确穿过每个给定点。这种方法在处理数据点较少且分布...
这里我们将深入探讨三种常见的排序方法:冒泡排序、选择排序和插入排序。 1. **冒泡排序**: 冒泡排序是一种简单直观的排序算法,它通过重复遍历待排序的数列,比较每对相邻元素并交换位置来实现排序。如果前一个...
数据处理方法包括数据清洁、数据变换、数据可视化、数据挖掘等。 本节课程旨在介绍数学建模和数据处理的基本概念、方法和技术,并通过实践活动和竞赛来培养学生的创新精神和实践能力。 知识点一:数学建模的概念和...
本文将详细讨论并比较三种常见的排序方法:交换排序法、插入排序法和选择排序法。 **交换排序法**,其中最典型的就是冒泡排序和快速排序。冒泡排序通过不断交换相邻的错误顺序元素来实现排序,其核心思想是每次遍历...
本文提出了一种基于Java语言的LiDAR点云数据处理方法,该方法基于网格划分和树结构相结合的方式,改进了网格空间索引,建立了LiDAR点云数据处理的基本框架,并在Java环境下实现了点云数据的处理。 文章通过在特定...
文章中提出的方法结合了“角偏差法”和“弦高差法”,通过研究这些方法中对提取特征点结果有影响的几个主要因子,提出了一种新的冗余数据处理及特征点提取的方法。角偏差法通过测量点云中相邻两点之间角度的变化来...
然后,文章提出了基于AutoCAD和UG的叶片三坐标测量机自动化数据处理方法,该方法可以实现叶片检测数据的自动处理,提高检测效率和测量精度。 文章还介绍了叶片CMM数据自动化处理的基本原理,包括实体数据的批处理、...
在IT行业中,C语言是一种基础且重要的编程语言,它的应用广泛,特别是在系统编程、软件开发以及数据处理等领域。本文将详细讲解C语言中的三种基本排序方法:交换法、选择法和冒泡法。 首先,我们来看交换法,也称为...
6. 点云数据处理:点云数据处理是一种基于计算机技术的数据处理方法,用于快速处理和分析林木点云数据。 7. 树木结构参数提取:树木结构参数提取是一种基于算法和模型的技术,用于快速获取林木结构参数。 8. 林木...
在李晓莉的研究中,为了处理牛顿环测透镜曲率半径的数据,采用了三种主要的数据处理方法:逐差法、线性回归法和加权平均法。逐差法是一种基本的数据处理方法,适用于从大量数据中找到趋势或模式。线性回归法则是一种...
针对上述问题,提出了一种煤矿瓦斯传感器人工调校噪声数据处理方法。采用数据平均值填充煤矿瓦斯传感器浓度数据缺失值;采用多时间粒度构建煤矿瓦斯传感器浓度数据的特征集和样本集;采用高斯函数、混合高斯函数、二...
本资料"MATLAB数据处理模型代码 34种数据降维方法代码.zip"就包含了34种不同的数据降维算法的实现,旨在帮助用户深入理解和应用这些方法。 首先,我们来了解数据降维的基本概念。数据降维是将高维数据转换为低维...
描述中的“行业分类-物理装置-一种数据处理方法及装置[3]”是对标题的补充,强调了该内容是关于数据处理方法和装置的第三部分,暗示这可能是一个系列文档的其中之一,可能有前两部分的上下文信息,这部分可能更深入...
本文旨在探讨几种常用的海量数据处理方法,包括哈希(hash)、Trie树、红黑树等技术的应用,帮助读者理解这些方法背后的原理及其应用场景。 #### 二、海量数据处理的核心思路 处理海量数据的关键在于如何有效地管理和...