周末憋在家里,复习了一下正则表达式,及常用排序算法,再此小写一篇博文,算是这两日的工作报告了,(~_~)....
常见排序算法(一)→冒泡排序
冒泡排序算法的思想:很简单,每次遍历完序列都把最大(小)的元素放在最前面,然后再对剩下的序列从父前面的一个过程,每次遍历完之后待排序序列就少一个元素,当待排序序列减小为只有一个元素的时候排序就结束了。因此,复杂度在最坏的情况下是O(N ^ 2)
package com.syc.sort;
import java.util.Arrays;
/**
* 冒泡排序
*
* @author Michael
* @time 9:47:21 PM
* @date Sep 23, 2012
*/
public class BubbleSort {
static int[] num = { 1, 21, 4, 3, 56, 65, 33, 67, 2222, 666 };
public static void main(String[] args) {
Arrays.sort(num);
showArray(num);
}
/**
* From min to max(冒泡排序1)
*/
public static void fromMintoMax1() {
// int[] num = { 1, 21, 4, 3, 56, 65, 33, 67, 2222, 666 };
for (int i = 0, len = num.length; i < len; i++) {
for (int j = i + 1; j < len; j++) {
if (num[i] > num[j]) {
int temp = num[i];
num[i] = num[j];
num[j] = temp;
}
}
}
}
/**
* From min to max(冒泡排序2,已优化)
*/
public static void fromMintoMax2() {
for (int i = 0, len = num.length; i < len; i++) {
int k = i;
for (int j = k + 1; j < len; j++) {
if (num[j] < num[k]) {
k = j;
}
}
if (k != i) {
int temp = num[k];
num[k] = num[i];
num[i] = temp;
}
}
showArray(num);
}
/**
* From min to max(冒泡排序3,已优化,效率较前两种高)
*/
public static void fromMintoMax3() {
int k, temp;
for (int i = 0, len = num.length; i < len; i++) {
k = i;
for (int j = k + 1; j < len; j++) {
if (num[j] < num[k]) {
k = j;
}
}
if (k != i) {
temp = num[k];
num[k] = num[i];
num[i] = temp;
}
}
showArray(num);
}
/**
* From mxx to min(冒泡排序1)
*/
public static void fromMaxtoMin1() {
for (int i = 0, len = num.length; i < len; i++) {
for (int j = i + 1; j < len; j++) {
if (num[i] < num[j]) {
int temp = num[i];
num[i] = num[j];
num[j] = temp;
}
}
}
showArray(num);
}
/**
* From mxx to min(冒泡排序2,已优化,)
*/
public static void fromMaxtoMin2() {
for (int i = 0, len = num.length; i < len; i++) {
int k = i;
for (int j = k + 1; j < len; j++) {
if (num[j] > num[k]) {
k = j;
}
}
if (k != i) {
int temp = num[k];
num[k] = num[i];
num[i] = temp;
}
}
showArray(num);
}
/**
*
* @param array
*/
public static void showArray(int[] array) {
for (int arr : array) {
System.out.print(arr + " ");
}
System.out.println("");
}
}
常见排序算法(二)→插入排序
插入排序是最简单最直观的排序算法了,它的依据是:遍历到第N个元素的时候前面的N-1个元素已经是排序好的了,那么就查找前面的N-1个元素把这第N个元素放在合适的位置,如此下去直到遍历完序列的元素为止。
算法的复杂度也是简单的,排序第一个需要1的复杂度,排序第二个需要2的复杂度,因此整个的复杂度就是:
1 + 2 + 3 + …… + N = O(N ^ 2)的复杂度。
如果目标是把n个元素的序列升序排列,那么采用插入排序存在最好情况和最坏情况。
最好情况就是,序列已经是升序排列了,在这种情况下,需要进行的比较操作需(n-1)次即可。
最坏情况就是,序列是降序排列,那么此时需要进行的比较共有n(n-1)/2次。
插入排序的赋值操作是比较操作的次数加上 (n-1)次。平均来说插入排序算法的时间复杂度为O(n^2)。
因而,插入排序不适合对于数据量比较大的排序应用。但是,如果需要排序的数据量很小,例如,量级小于千,那么插入排序还是一个不错的选择。
Java实现:
package com.syc.sort;
/**
*
* @author Michael
* @time 9:17:30 PM
* @date Sep 23, 2012
*/
public class InsertSort {
/**
*
* @param array
*/
public static void showArray(int[] array) {
for (int arr : array) {
System.out.print(arr + " ");
}
System.out.println("");
}
/**
*
* @param array
*/
public static void insertSort(int[] array) {
int index;
for (int i = 1; i < array.length; i++) {
int currentData = array[i];
for (index = i; (index > 0) && (currentData < array[index - 1]); index--) {
array[index] = array[index - 1];
}
array[index] = currentData;
showArray(array);
}
}
public static void main(String[] args) {
int[] array = { 9, 2, 7, 3 };
insertSort(array);
}
}
---------------
分享到:
相关推荐
2. **代码实现**:压缩包中的代码可能是用某种编程语言(如C++、Python或Java)编写的,实现了特定的下料算法。通过阅读和理解代码,我们可以了解算法的具体工作原理,包括如何处理输入参数(如板材尺寸、部件尺寸...
遗传算法(Genetic Algorithm,GA)是一种模拟自然选择和遗传机制的优化方法,它通过模拟生物进化过程中的“适者生存”原则来寻找问题的最优解。在本压缩包中,开发者使用C++编程语言(Visual Studio 2013开发环境)...
**基于模拟退火算法的TSP问题解决方案** 旅行商问题(Traveling Salesman Problem, TSP)是一个经典的组合优化问题,其目标是在访问n个城市并返回起点的条件下,找到一条最短的路径。这个问题在计算机科学、运筹学...
自己用Unity5.2.3写的一个小游戏——拼图,内含所有的代码及场景文件
基于Java的校园二手物品交易平台的设计与实现 Java 是一种广泛使用的编程语言,它具有面向对象、平台独立、安全等特点。Java 平台提供了一个完善的框架,适合开发大型的网络应用程序,本文将基于 Java 语言设计和...
四川省雨城区高一下学期语文3月月考试卷.pdf
2019年四川省雅安市雨城区考核招聘模拟试题及答案解析.docx
初中化学-四川省雅安市雨城区中里镇中学九年级化学金属材料习题精选.doc.pdf
初中化学-四川省雅安市雨城区中里镇中学九年级化学金属材料习题精选.doc-.pdf
这份文档是四川省雅安市雨城区八年级数学的12月月考试题,适用于新人教版教材。试题包含了选择题、填空题和解答题三种题型,旨在检验学生对初中数学基础知识的理解和应用能力。 选择题部分涉及了多个数学概念,如:...
四川省雅安市雨城区中里镇中学九年级化学《化学元素与人体健康》课件1(人教版).ppt
这篇文档是针对四川省雅安市雨城区八年级学生的一份英语月考试卷,属于人教新目标版教材的范畴。试卷总分为120分,考试时间为120分钟,涵盖了听力、阅读、写作等多个部分,旨在全面检测学生的英语语言能力。 试卷的...
这篇文档是针对四川省雅安市雨城区2020学年八年级学生的英语12月月考试题,采用的是人教新目标版教材。试卷总分为120分,考试时长为120分钟,涵盖了听力、阅读、写作等多个方面的英语能力测试。 试卷的第一部分是...
在学习32位汇编的过程中,理解寄存器的用途、指令的语法、内存访问模式以及如何使用汇编语言实现高级算法(如排序、查找等)是基础。同时,了解如何与高级语言(如C/C++)进行交互,如编写和调用函数,以及理解链接...
这篇文档是针对八年级物理的一份月考试题,主要涵盖了初中物理的基础知识,包括声学、光学、热学以及力学等内容。以下是对部分题目涉及知识点的详细解释: 1. 生活中对物理量的估测:题目中提到的自行车速度、硬币...
《金属材料》这一课题主要涵盖了初中九年级化学的内容,旨在让学生了解金属的共同物理性质、金属的用途与其性质之间的关系,以及常见的合金及其特性。在教学过程中,通过具体实例和图表分析,帮助学生掌握和应用相关...
化学肥料在农业生产中扮演着至关重要的角色,尤其是氮肥、磷肥和钾肥,这三种肥料因其对植物生长的关键影响而被称为“三大肥”。氮肥是植物体内蛋白质、核酸和叶绿素的主要成分,对细胞分裂和光合作用至关重要。...
Tess4J是一个Java库,它是Tesseract OCR引擎的接口,允许开发者在Java应用程序中集成OCR功能。Tesseract是一个开源的OCR软件,最初由HP开发,后来由Google维护,现在广泛用于自动识别图像中的文本。 描述中的"tess4...
《金属的化学性质》是九年级化学课程的重要内容,主要探讨了金属与氧气、酸以及化合物的反应,以及金属活动性顺序的相关知识。以下是对这些知识点的详细解释: 1. **金属与氧气的反应**: 从给出的化学方程式可以...
《常见的酸和碱》是九年级化学课程中的一个重要章节,主要介绍了生活中常见的一些酸和碱以及它们的性质和反应。酸和碱是我们日常生活中广泛存在的化学物质,它们对我们的生活有着深远的影响。在这个课件中,重点讲解...