`

数据结构之对象排序

阅读更多

        前面写的几个排序的算法都是对整形的数据进行排序,而我们在日常生活中要处理的东西并不全都是这些整形的数据,还有一些其他的东西,比如对一堆人按照姓氏的前后进行排序,或则是对一些产品按照出产的日期进行排序,等等等等,这些东西都不是我们做排序算法的时候用来做测试的数据类型,但是我们要知道一个理念,就是我们从书上或则是其他的地方知道的常用的排序的方法也就只有那么一些,我们要做的只是稍微改变一下,整形是数据类型,既然是类型,他能对类型进行排序,我们也可以用他来对其他的类型来进行排序,其他的类型当然就包括了我们自己定义的类。只要你规定好排序的要求就OK了

         今天要写的是一个基于前面写的一个插入排序,用它来对自己定义的Person类对象按照其姓氏的前后顺序进行排序,毫无疑问,我们就要定义一个Person的类,里面当然要有“姓”的属性。还封装了一些其他的方法,包括打印Person对象的信息(displayInfo()),获得Person对象的“姓”(getLastName())代码如下。

 

package 对象排序;

public class Person {
	
	/*
	 * lastName 姓
	*/
	private String lastName;
	
	/*
	 * FirstName 名
	*/
	private String FirstName;
	
	/*
	 * 年龄
     */
	private int age;
	
	/**
	 * 构造方法
	 * @param lastName 姓
	 * @param FirstName 名
	 * @param age 年龄
	 */
	public Person(String lastName,String FirstName,int age) {
		this.lastName = lastName;
		this.FirstName = FirstName;
		this.age  = age;
		}
	
	/*
	 * 打印人的信息
	 */
	public void displayInfo() {
		System.out.print("Last Name: " + lastName);
		System.out.print("   First Name: " + FirstName);
		System.out.println("   age : "+ age);
	}
	
	/*
	 * 返回某人的姓
	 * @return 返回某人的姓 
	 */
	public String getLastName() {
		return lastName;
	}

}

    建好了自己定义的类,而且也说明了对象按照姓氏的前后顺序进行排列,下面我们就来完成它,在这里饿哦们调用了接口 Comparable<String> 中的 compareTo方法对姓氏的前后进行比较然后进行交换(比较和交换也就是所有排序算法的核心了),代码有详 细注释:

 

 

package 对象排序;

public class ObjectInsertSort {
       
	/*
         *定义一个“人”的数组
         */
	private Person[] pers;
       
        /*
         *记录数组中当前的人数
         */
	public static int number;
	
	/*
	 * 构造函数初始化
         *传入max函数,定义了数组的最大值
	 */
	public ObjectInsertSort(int max) {
		pers = new Person[max];
		number = 0;
	}
	
	/**
	 * 向数组中插入一个人的对象
	 * @param last 传入的姓
	 * @param first 传入的名
	 * @param age 传入的年龄
	 */
	public void insertPerson(String last,String first,int age) {
		pers[number] = new Person(last,first,age);
		number++;
	}
	
	/*
	 *打印出人数组的信息 
	 */
	public void disPlayPInfo() {
		for( int i = 0; i < number; i++){
			pers[i].displayInfo();         // 调用人的打印的方法
		}
	}
	
	/*
	 * 排序算法,基于插入排序,并且调用compareTo()方法对字符串的大小进行比较,
	 * 按照首字母A-Z,a-z越来越大,当首字母一样的时候依次往下进行。
	 * 若s2.compareTo(s1) > 0 则 s1>s2;
	 * 若s2.compareTo(s1) < 0则 s1<s2;
	 * 若s2.compareTo(s1) = 0则 s1=s2;
	 */
	public void objectInsertSort() {
		int out,in;
		for(out = 1; out < number; out++ ) {
			Person temp = pers[out];
			in = out;
			while(in > 0 && pers[in-1].getLastName().compareTo(temp.getLastName())>0) {
				pers[in] = pers[in-1];
				--in;
			}
			
			pers[in] = temp;
		}
	}
	
	
	public static void main(String[] args) {
		
		ObjectInsertSort ois = new ObjectInsertSort(10);
		ois.insertPerson("Harden", "James", 20);
		ois.insertPerson("ben", "Laden", 30);
		ois.insertPerson("Ben", "Laden", 30);
		ois.insertPerson("Ban", "Laden", 30);
		ois.insertPerson("Gaiz", "Bill",40);
		ois.insertPerson("Bush", "Joe", 50);
		System.out.println("当前的人数为:"+number);
		System.out.println("没进行排序前:");
		ois.disPlayPInfo();
		
		System.out.println("排序后:");
		ois.objectInsertSort();
		ois.disPlayPInfo();
		
	}
}

    

 

    输入输出结果:

    

当前的人数为:6
没进行排序前:
Last Name: Harden   First Name: James   age : 20
Last Name: ben   First Name: Laden   age : 30
Last Name: Ben   First Name: Laden   age : 30
Last Name: Ban   First Name: Laden   age : 30
Last Name: Gaiz   First Name: Bill   age : 40
Last Name: Bush   First Name: Joe   age : 50
排序后:
Last Name: Ban   First Name: Laden   age : 30
Last Name: Ben   First Name: Laden   age : 30
Last Name: Bush   First Name: Joe   age : 50
Last Name: Gaiz   First Name: Bill   age : 40
Last Name: Harden   First Name: James   age : 20
Last Name: ben   First Name: Laden   age : 30

   

 

      PS :就这样我们完成了对老外的姓氏按照字母表的前后顺序进行的排序,要做的只是多了一个我们自己定义的一个类,还有的就是我们自己给老外取得一些蛋疼的名字,来给我们测试(老外的姓和名是和我大天朝的姓和名恰好是相反的,前面是名,后面是姓,也就是上面的lastName(姓))。

1
0
分享到:
评论
2 楼 MNTMs 2014-04-30  
嗯嗯,后面会写成链表的
1 楼 995998760 2014-04-30  
写的很好,可惜是数组,写成链式更好了,就不会有数量限制或者内存浪费。

相关推荐

    数据结构-排序PPT课件.pptx

    本资源是关于数据结构中排序算法的PPT课件,全文共118页,详细介绍了排序的概念、内部排序和外部排序、内部排序方法的分类、插入排序、快速排序、堆排序、归并排序、基数排序等内容。 1. 排序的概念:排序是计算机...

    数据结构(用面向对象方法与C++语言描述)课后答案

    《数据结构(用面向对象方法与C++语言描述)》是由殷人昆编著的一本经典教材,专注于讲解如何利用面向对象编程的思想和C++语言来实现和理解数据结构。这本书的第二版提供了深入的数据结构理论,同时也强调了实际编程...

    数据结构课设排序算法的可视化演示(QT+C++)

    数据结构是计算机科学中的核心课程...总的来说,"数据结构课设排序算法的可视化演示(QT+C++)"是一个综合性的项目,它涵盖了数据结构、算法、编程和可视化等多个方面,对于提升计算机科学学生的综合素质具有重要意义。

    数据结构课程设计 拓扑排序

    C++是一种强大的编程语言,它支持面向对象编程,并且有着丰富的库支持,非常适合进行复杂的数据结构和算法实现。 首先,你需要理解并掌握图的邻接表存储结构。相比于邻接矩阵,邻接表在处理稀疏图时更节省空间,它...

    数据结构习题解析 用面向对象方法与C++语言描述

    在《数据结构习题解析:用面向对象方法与C++语言描述》一书中,作者深入浅出地解释了如何利用面向对象编程的概念和C++语言来实现和理解各种数据结构。 面向对象编程(Object-Oriented Programming,OOP)是一种编程...

    c++数据结构排序源代码

    "c++数据结构排序源代码"这个主题涵盖了多种经典的排序算法实现,包括冒泡排序、快速排序、基数排序和堆排序。这些排序算法在实际编程中有着广泛的应用,无论是处理大量数据的高效排序,还是对数据进行分析和优化,...

    算法:算法C语言实现 第1-4部分 基础知识、数据结构、排序及搜索

    本书可作为高等院校计算机相关专业算法与数据结构课程的教材和补充读物,也可供自学之用。 目录 出版者的话 译者序 前言 第一部分 基础知识  第1章 引言  1.1 算法  1.2 典型问题——连通性  1.3 合并一...

    数据结构课程设计 排序算法

    总的来说,这个课程设计项目要求学生深入理解数据结构和算法,特别是排序算法的原理和实现,以及如何利用面向对象编程的思想设计和实现一个灵活、高效的排序工具。通过这个项目,学生不仅可以提升编程技巧,还能增强...

    数据结构数据结构题集答案答案

    数据结构是计算机科学中的核心课程之一,主要研究如何在计算机中高效地组织和存储数据,以便于进行各种操作。在编程领域,理解并熟练运用数据结构对于提升算法效率和编写高质量代码至关重要。"数据结构题集答案数据...

    数据结构——内部排序

    数据结构中的内部排序是计算机科学中处理数据组织和优化的核心技术之一。内部排序是指在排序过程中,所有数据对象可以一次性存放在内存中的排序算法。这些算法通常用于处理相对较小的数据集,可以快速有效地完成排序...

    王道考研——数据结构PPT.zip

    数据结构是计算机科学中的核心课程之一,主要研究如何在计算机中组织、存储和管理数据,以便高效地进行各种操作。王道考研的数据结构PPT涵盖了这门学科的关键概念和技术,对于准备考研的学生来说,是一份非常有价值...

    Java数据结构与面向对象编程基础

    Java数据结构与面向对象编程是计算机科学中的核心概念,它们对于任何Java开发者来说都是不可或缺的知识。数据结构是指在计算机中组织、存储和处理数据的方式,而面向对象编程(Object-Oriented Programming,OOP)是...

    数据结构(用面向对象的方法与C++语言描述)殷人昆(第2版) 教师PPT+课后习题解答

    殷人昆编著的《数据结构(用面向对象的方法与C++语言描述)》第二版,是一本深入讲解数据结构的经典教材,特别适合计算机专业的学生和程序员学习。此压缩包包含教师PPT和课后习题解答,为学习者提供了丰富的教学资源...

    数据结构用面向对象方法与c++语言描述

    《数据结构用面向对象方法与C++语言描述》是一本深度探讨如何利用C++编程语言来实现和理解数据结构的著作。这本书的核心在于将面向对象编程的理念与数据结构的理论相结合,为学习者提供了一种现代化的教学方式。通过...

    数据结构课程设计 排序综合

    "数据结构课程设计 排序综合" 通过这篇课程设计,我们可以了解到数据结构中排序的重要性和各种排序算法的实现。下面是这个课程设计的知识点总结: 1. 排序的重要性:排序是数据处理中的一种重要方法之一,对于大量...

    殷人昆:数据结构(用面向对象方法和C++描述)答案

    《殷人昆:数据结构(用面向对象方法和C++描述)》这本书是学习数据结构领域的一本经典著作,由知名计算机科学家殷人昆撰写。本书深入浅出地介绍了数据结构的基本概念、设计原理和实现方法,特别是采用了面向对象的...

    数据结构与面向对象程序设计-C++版(第3版)

    《数据结构与面向对象程序设计-C++版(第3版)》是一本深入探讨数据结构和面向对象编程的教材,适合计算机科学和技术专业的学生以及希望提升C++编程能力的开发者。书中通过C++语言,详细讲解了数据结构的理论基础和...

    C# 数据结构 面向对象讲述

    ### C# 数据结构 面向对象讲述 #### 一、引言与背景介绍 《C# 数据结构 面向对象讲述》是一本旨在帮助读者深入理解数据结构原理,并运用C#语言实现这些原理的实用教程。随着.NET平台的兴起和发展,C#作为一种高效...

    数据结构习题解析 用面向对象方法与C++语言描述

    3. **排序与搜索算法**:包括冒泡排序、快速排序、二分查找等,这些算法通常会结合数据结构进行讲解,展示如何在不同数据结构上优化性能。 4. **面向对象设计原则**:如单一职责原则(SRP)、开放封闭原则(OCP)、...

    数据结构习题解析(用面向对象方法与c++语言描述) 殷人昆

    《数据结构习题解析》是殷人昆教授编写的一本专为学习数据结构的学生和编程爱好者准备的指导书籍,尤其注重面向对象方法与C++语言的结合应用。这本书旨在通过解决一系列习题来帮助读者深入理解和掌握数据结构的核心...

Global site tag (gtag.js) - Google Analytics