`
tcgbp
  • 浏览: 4611 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

《Java数据结构和算法第二版》学习笔记,算是吧

阅读更多

自己写的工具类,没办法,谁让咱是个懒人呢不过也算是为了练练静态导入吧

 

 

package com.tcgbp.tools;

import java.lang.reflect.Method;
import java.util.Random;


public class ToolMethods {
	////////////////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////////////////
	public static <E> void println(E e) {
		System.out.println(e);
	}

	public static <E> void print(E e) {
		System.out.print(e);
	}
	
	public static <E> void printn(E e,int n){
		for(int i=0;i<n;i++)
			System.out.print(e);
	}

	////////////////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////////////////
	/*
	 * 打印一维int数组,
	 */
	public static void printArray(int[] a) {
		for (int i : a)
			print(i + "\t");
		println("");
	}

	/*
	 * 打印输出二维int数组
	 */
	public static void print2DArray(int[][] da) {
		for (int[] a : da){
			printArray(a);
		}	
	}

	////////////////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////////////////
	/*
	 * 插入排序,T不能为原生态类型
	 */
	public static <T extends Comparable<T>> void insertSort(T[] a) {
		int in, out;
		for (out = 1; out < a.length; out++) {
			T temp = a[out];
			in = out;
			while (in > 0 && a[in - 1].compareTo(temp) >= 0) {
				a[in] = a[in - 1];
				--in;
			}
			a[in] = temp;
		}
	}

	////////////////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////////////////
	
	/*
	 * 生成数组并随机初始化之
	 */
	public static int[] randomArray(int n) {
		Random r = new Random();
		int[] a = new int[n];
		for (int i = 0; i < a.length; i++)
			a[i] = r.nextInt(101);
		return a;
	}

	/*
	 * 生成二维数组并随机初始化之
	 */
	public static int[][] random2DArray(int m, int n) {
		int[][] a = new int[m][n];
		for (int i = 0; i < m; i++) {
			a[i] = randomArray(n);
		}
		return a;
	}
	/*
	 * 二维数组转一维
	 */
	public static int[] to1DArray(int[][] a){
		int[] n = new int[a.length * a[0].length];
		for(int i=0;i<a.length;i++){
			for(int j=0;j<a[0].length;j++){
				n[i * a[0].length +j] = a[i][j];
			}
		}
		return n;
	}
	
	/*
	 * 一维数组转二维
	 * m 行数
	 * n 列数
	 */
	public static int[][] to2DArray(int[] a,int n){
		int m = (a.length % n == 0)?(a.length / n) : (a.length / n + 1);
		int[][] b = new int[m][n];
		for(int i=0;i<m;i++){
			for(int j=0;j<n;j++){
				if(i*n+j < a.length){
					b[i][j] = a[i*n+j];
				}
			}
		}
		return b;
	}
	
	/*
	 * 使用另一个二维数组为二维数组赋值
	 * 要求两个数组有同样的维度
	 */
	public static void apply2DArray(int[][] t, int[][] f){
		for(int i=0;i<f.length;i++){
			for(int j=0;j<f[0].length;j++){
				t[i][j] = f[i][j];
			}
		}
	}
	
	/*
	 * 使用另一个数组为数组赋值
	 */
	public static int[] applyArray(int[] t, int[] f, int...se) {
		int[] mr = new int[2];
		int j = 0;
		for(int r:se){
			mr[j] = r;
			j++;
		}
		if(mr[1]==0)
			mr[1] = Math.min(f.length-mr[0], t.length);   //mr[1]为将复制元素的个数
		int start = (se == null) ? 1 : mr[0];
		int end = (se == null) ? f.length : mr[1] + start;
		for (int i = 0; start < end; start++) {
			t[i] = f[start];
			i++;
		}
		return t;
	}
	

	////////////////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////////////////
	public static void swap(int[] array, int index1, int index2) {   
	    int temp = array[index1];   
	    array[index1] = array[index2];   
	    array[index2] = temp;   
	} 
}

 

 

 

 

简单排序算法,其中insertNoDupsSort较复杂吧算是,是凌晨2点躺在床上了才想出来的

package com.tcgbp.Sort;

import static com.tcgbp.tools.ToolMethods.*;

import java.util.Arrays;
import java.util.Random;

public class ArraySort {
	public static void main(String[] args) {
		int arrayNum = 10;
		 println("冒泡排序");
		 int[] a = randomArray(arrayNum);
		 printArray(a);
		 println("");
		 bilateralBubbleSort(a);
		 printArray(a);
		// println("转成二维数组");
		// int[][] a2 = to2DArray(a,4);
		// print2DArray(a2);
		// println("");
		//
		 println("选择排序");
		 int[] b = randomArray(arrayNum);
		 printArray(b);
		 println("");
		 selectSort(b);
		 printArray(b);
		 println("");

//		println("插入排序");
//		int[] c = randomArray(arrayNum);
//		printArray(c);
//		println("");
//		// insertSort(c);
//		println(Arrays.toString(c));
//		println(Arrays.toString(insertNoDupsSort(c)));
//		println("");

		// println("二维数组");
		// int[][] d = random2DArray(3,4);
		// print2DArray(d);
		// println("用newBubble2DArray()排序");
		// print2DArray(newBubble2DArray(d));//it works
		// println("用bubble2DArray()排序");
		// bubble2DArray(d);
		// print2DArray(d);
		// to1DArray(d);
		// println("");
		// printArray(to1DArray(d));
	}


	/*
	 * 插入排序
	 */
	public static void insertSort(int[] a) {
		int in, out;
		for (out = 1; out < a.length; out++) {
			int temp = a[out];
			in = out;
			while (in > 0 && a[in - 1] >= temp) {
				a[in] = a[in - 1];
				--in;
			}
			a[in] = temp;
		}
	}

	/*
	 * 插入排序,并除去重复项
	 */
	static int[] insertNoDupsSort(int[] a) {
		int in, out,rn= -1;
		for (out = 1; out < a.length; out++) {
			int temp = a[out];
			int p = 0;
			for (in = out; in > 0; in--) {

				if (a[in - 1] == -1) {
					break;
				} else if (a[in - 1] == temp) {
					a[in - 1] = -1;
					rn++;
					for (int i = in - 1; i > rn; i--) {
						a[i] = a[i - 1];
					}
					a[rn] = -1;
					break;
				} else if (a[in - 1] > temp) {
					a[in] = a[in - 1];
					++p;
				}
			}
			if (p > 0)
				a[out - p] = temp;
		}
		int[] b = new int[a.length - rn -1];
		return applyArray(b,a,rn+1);
	}
	/*
	 * 选择排序
	 */
	public static void selectSort(int[] a) {
		int out, in, min;
		for (out = 0; out < a.length - 1; out++) { // outer loop (forward)
			min = out;
			for (in = out + 1; in < a.length; in++) { // inner loop (forward)
				if (a[in] < a[min]) {
					min = in;
				}
			}
			swap(a,min,out);
		}
	}

	public static int[] newSelectSortArray(int[] a) {
		int out, in, min;
		int[] b = a;
		for (out = 0; out < a.length - 1; out++) { // outer loop (forward)
			min = out;
			for (in = out + 1; in < a.length; in++) { // inner loop (forward)
				if (b[in] < b[min]) {
					min = in;
				}
			}
			swap(a,min,out);
		}
		return b;
	}

	/*
	 * 冒泡排序
	 */
	public static void bubbleSort(int[] a) {
		int out, in;
		// outer loop (backward)
		for (out = a.length - 1; out > 0; out--)
			// inner loop (forward)
			for (in = 0; in < out; in++)
				if (a[in] > a[in + 1]) {
					swap(a,in,in+1);
				}
	}

	public static int[] newBubbleSortArray(int[] a) {
		int out, in;
		int[] b = a;
		// outer loop (backward)
		for (out = a.length - 1; out > 0; out--)
			// inner loop (forward)
			for (in = 0; in < out; in++)
				if (b[in] > b[in + 1]) {
					swap(b,in,in+1);
				}
		return b;
	}
	
	/*
	 * 双向冒泡排序
	 */
	public static void  bilateralBubbleSort(int[] a){
		int out, in, f=0;
		for(out = a.length - 1;out>0 && f<out;out--){
			for(in=f;in<out;in++){
				if (a[in] > a[in + 1]) {
					swap(a,in,in+1);
				}
			}
			for(;in>f;in--){
				if(a[in]<a[in-1]){
					swap(a,in,in-1);
				}
			}
			f++;
		}
	}
	
	/*
	 * 二维数组排序
	 */
	static void bubble2DArray(int[][] a) {
		apply2DArray(a,to2DArray(newBubbleSortArray(to1DArray(a)), a[0].length));
	}

	static int[][] newBubble2DArray(int[][] a) {
		int[][] b = to2DArray(newBubbleSortArray(to1DArray(a)), a[0].length);
		return b;
	}
}

 

 

分享到:
评论

相关推荐

    java数据结构与算法中文版

    《Java数据结构与算法...总的来说,《Java数据结构与算法中文版》是Java开发者提升自身技术水平的宝贵资源,通过深入学习和实践书中的内容,可以提高代码质量,解决复杂问题,并为软件工程的优化和扩展打下坚实基础。

    Java数据结构和算法笔记.doc

    本笔记主要基于《Java数据结构和算法》(第二版)一书,概述了各种常见数据结构的特性及经典算法。 1. **数据结构的特性** - **数组**:提供了快速的存取能力,特别是如果知道下标时。但是,它的大小固定,插入和...

    Java数据结构与算法15天笔记.zip

    这些文件涵盖了Java数据结构与算法的核心主题,是学习和复习的重要资源。让我们逐一解析每个文件名,探索其中可能涵盖的知识点: 1. **day02 链表.md** - 链表是数据结构的基础,它不依赖于内存位置连续存储元素。...

    JAVA数据结构笔记

    在Java编程中,数据结构是理解复杂算法和高效程序设计的基础。本笔记主要涵盖了从第一章到第六章关于数据结构和...这些章节覆盖了Java数据结构的基础,包括基本概念、操作和算法,为深入学习和应用提供了坚实的基础。

    《数据结构和问题求解(Java语言版)(第四版)》源码

    《数据结构和问题求解(Java语言版)(第四版)》是一本经典的计算机科学教材,主要探讨了如何使用Java语言来实现和理解各种数据结构以及算法。这本书的源码提供了丰富的实例,帮助读者深入理解数据结构和算法的实际应用...

    数据结构与问题求解Java语言

    本书的目的是从抽象思维和问题求解的观点提供对数据结构的实用介绍,试图包含有关数据结构、算法分析及其Java实现的所有重要的细节。作者采用了独特的方法将数据结构分成说明和实现两部分,并充分利用了已有的数据...

    数据结构java语言描述课后答案.docx

    在学习数据结构的过程中,理解和掌握这些基本概念、结构以及算法分析至关重要,因为它们是构建高效软件系统的基础。通过解决课后习题,学生能深化理解,提升编程技能,为后续的软件开发工作打下坚实基础。

    数据结构与算法分析——C语言描述(Weiss著)的学习笔记

    学习建议:算法和数据结构的内容,用最简单的C语言描述会比较清楚,没有必要使用C++和Java的面向对象描述。面向对象编程在这里没啥用处,反而冲淡了学习主题。初学者,先学习Weiss的《数据结构与算法分析 C语言描述...

    《算法导论》第二版中文全集,含:全世界唯一带“完整”目录的版本,代码。第3部分(共4部分)。学好核心技术,既为自己,也为天空不落下别国的炸弹

    此书的算法部分也很精到 比算法导论更容易学习和入门 Sartaj Sahni《数据结构算法与应用 C++语言描述》全集 包含中英文图书 代码 习题答案 演示动画 都是我亲自从此书的官方网站下载并汇总的 绝对权威 算法和数据...

    408考试数据结构高分笔记2019版(天勤论坛)

    "408考试数据结构高分笔记2019版(天勤论坛)"是一份针对这一考试的重要参考资料,它包含了丰富的理论知识和实战技巧,旨在帮助考生深入理解和熟练应用数据结构的基本概念、算法和设计方法。 笔记首先会涵盖数据...

    java lecture note(Java学习笔记)

    Java学习笔记:全面掌握Java编程的核心知识与技能 在当今的软件开发领域,Java作为一种流行的、功能强大的面向对象编程语言,被广泛应用于各种场景,包括Web应用、移动应用、企业级应用等。本篇Java学习笔记旨在为...

    java私塾学习笔记整理

    ### Java私塾学习笔记整理 #### 第一章:Java入门 **一、Java是什么?** Java是一种广泛使用的高级编程语言,由Sun Microsystems于1995年推出。它旨在为跨平台开发提供一种通用的语言环境,使开发者能够在任何...

    ACM常用算法,数据结构模版.zip

    本资源包"ACM常用算法,数据结构模版.zip"包含了针对C/C++/JAVA/Python编程语言的数据结构学习笔记和资料,为大学生提供了全面的学习资源。 首先,让我们深入了解一下数据结构。数据结构是计算机存储、组织数据的...

    数据结构笔记和课后答案

    - 阅读经典书籍和文献,如严蔚敏版《数据结构》等。 - 参与在线课程和讨论,提高自己的理论水平和实战能力。 #### 二、时间复杂度与空间复杂度 **2、时间复杂度与空间复杂度:** - **时间复杂度**表示算法执行...

    邓俊辉数据结构(C++语言版)第3版笔记。.zip

    邓俊辉教授的《数据结构》是该领域内广受推崇的教材,尤其C++语言版的第三版,以其深入浅出的讲解和丰富的实践示例深受学生和专业人士的喜爱。这份压缩包文件包含了邓俊辉教授的数据结构课程笔记,对于正在学习C++、...

    《数据结构——C++实现》(第二版)课本源代码.zip

    通过《数据结构——C++实现》(第二版)的学习,读者不仅能掌握各种数据结构的原理,还能熟悉C++编程,为后续的软件开发和算法设计打下坚实基础。同时,书中提供的源代码是宝贵的实践资源,可以帮助读者在实践中学习...

    免费下载:自己整理的java学习资料

    自己整理的一些资料,不需要积分,希望对大家有帮助。 里面包有如下的一些java资料 Ant使用指南.pdf ...Java数据结构和算法中文第二版.pdf Java网络高级编程.pdf jsp高级运用 spring2中文开发参考手册.chm a.txt

    LeetCode 刷题笔记 with Java.zip

    第二部分的暗黑版《LeetCode 刷题笔记 with Java 1-50(暗黑版).pdf》可能提供了更加深入或非主流的解法,鼓励读者从不同角度思考问题,挑战自己的思维极限。 接着是《LeetCode 刷题笔记 with Java 51-100.pdf》,...

    Java入门学习笔记

    ### Java入门学习笔记 #### 一、Java特点与运行原理 **1.1 Java特点** - **简单性:** Java的设计使得它易于学习且避免了许多传统编程语言中存在的复杂性。 - **面向对象:** Java是一种纯面向对象的语言,支持...

    Java学习进阶

    资源名称:Java学习进阶资源目录:【】cf1a0ddfaa1c0da11a9b01f1e5e35bbe【】java数据结构【】java笔记2【】Java算法大全(近100种算法打包)【】ThinkinJava【】张孝祥正在整理Java就业面试题大全【】新建文件夹...

Global site tag (gtag.js) - Google Analytics