前面写的几个排序的算法都是对整形的数据进行排序,而我们在日常生活中要处理的东西并不全都是这些整形的数据,还有一些其他的东西,比如对一堆人按照姓氏的前后进行排序,或则是对一些产品按照出产的日期进行排序,等等等等,这些东西都不是我们做排序算法的时候用来做测试的数据类型,但是我们要知道一个理念,就是我们从书上或则是其他的地方知道的常用的排序的方法也就只有那么一些,我们要做的只是稍微改变一下,整形是数据类型,既然是类型,他能对类型进行排序,我们也可以用他来对其他的类型来进行排序,其他的类型当然就包括了我们自己定义的类。只要你规定好排序的要求就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(姓))。
相关推荐
南昌大学科学技术学院实验报告,《数据结构》课程设计是为训练学生的数据组织能力和提高程序设计能力而设置的增强实践能力的课程...目的:学习数据结构课程,旨在使学生学会分析研究数据对象的特性,学会数据的组织方法
详细介绍了数据结构的排序,很详细 3 6.0 术语和约定 一、分类及其目的 分类(Sorting)也叫排序(Ordering),是将一组数据按照规定顺序进行排列,其目的是为了方便查询和处理。 二、分类的种类 按分类时分类对象存放...
C++版本,面向对象 数据结构冒泡排序 源代码 详细的注释说明 需要用Visual Studio 2013以上版本打开
本书按照清华大学计算机系本科“数据结构”大纲的要求,从面向对象的概念、对象类设计的风格和数据结构的层次开始,从线性结构到非线性结构,从简单到复,深入地讨论了各种数据结构内在的逻辑关系及其在计算机中的...
【数据结构】基数排序的哈希表 一个专为巨量数据的快速存储和检索而设计的哈希表类, 可提供基于不同哈希键值对的近似常数时间的寻位存储和定位检索。 寻位和定位算法基于键对象之哈希值的每一个二进制位的状态所...
本书可作为高等院校计算机相关专业算法与数据结构课程的教材和补充读物,也可供自学之用。 目录 出版者的话 译者序 前言 第一部分 基础知识 第1章 引言 1.1 算法 1.2 典型问题——连通性 1.3 合并一...
《数据结构与面向对象程序设计(C++版)(第4版)》首先介绍了软件开发的各个阶段、C++面向对象程序设计思想,然后从软件开发的角度,利用面向对象设计的思想,系统阐述了指针和动态数组、链表、模板类、迭代器、栈、...
《数据结构与面向对象程序设计(C++版)(第4版)》首先介绍了软件开发的各个阶段、C++面向对象程序设计思想,然后从软件开发的角度,利用面向对象设计的思想,系统阐述了指针和动态数组、链表、模板类、迭代器、栈、...
数据结构(用面向对象方法与C++语言描述)(第2版)作者: 殷人昆 第1章 数据结构概论 第2章 线性表 第3章 栈和队列 第4章 数组、串与广义表 第5章 树 第6章 集合与字典 第7章 搜索结构 第8章 图 第9章 ...
排序:将一个数据元素的...数据表(datalist): 它是待排序数据对象的有限集合。 主关键字(key): 数据对象有多个属性域, 即多个数据成员组成, 其中有一个属性域可用来区分对象, 作为排序依据,称为关键字。也称为排序码。
都是学生 D:一帮学生 R:按学号排序 C#-数据结构全文共71页,当前为第2页。 数据结构概念的三要素—定义 数据元素之间的逻辑关系 数据元素在计算机中的存储方式 在这些数据元素上定义的运算的集合 C#-数据结构全文共...
直接插入排序,冒泡排除,直接选择排序,希尔排序,快速排序,归并排序,折半插入排序。书本上本章所有程序,错误已经被修改(错真多啊。),编译运行成功,结果正确。
本书分为8章,第1章介绍了数据结构和算法的基本概念及本书用到的数学和C#的知 识;第2章至第6章分别讨论了线性表、栈和队列、串和数组、树型结构和图结构等常用的 数据结构及其应用,以及在.NET框架中相应的数据结构...
主要介绍了java数据结构排序算法之树形选择排序,结合具体实例形式分析了java树形选择排序的原理、实现技巧与相关注意事项,需要的朋友可以参考下
《数据结构与算法分析(C++版)(第三版)》采用程序员最广泛采用的面向对象C++语言来描述数据结构和算法,并把数据结构原理和算法分析技术有机地结合在一起,系统介绍了各种类型的数据结构及排序、检索的各种方法。...
本书采用面向对象的观点讨论数据结构技术,以类定义为线索对各数据类型中所定义的操作进行说明。内容包括:线性表、栈、队列、串、二维数组、广义表、树、图、查找和排序等。 本书使用面向对象的开发工具对各章所...
在计算机科学中,数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象(数据元素)以及它们之间的关系和运算等的学科,而且确保经过这些运算后所得到的新结构仍然是原来的结构类型。 “数据结构”作为...
《计算机科学丛书·数据结构从应用到实现(Java版)》系统地介绍了数据结构以及数据结构与对象之间的联系。主要内容包括:算法效率的输入规模、阶和大O,数据结构的无序和有序列表,队列和栈基于数组和链表的设计实例...
他是我国计算机普及和高校计算机基础教育开拓者之一,现任全国高等院校计算机基础教育研究会会长、教育部全国计算机应用技术证书考试委员会主任委员。 谭浩强教授创造了3个世界纪录:(1)20年来他(及和他人合作)...
数据结构(C语言版)(第2版) 课后习题答案第1章 绪论第2章 线性表第3章 栈和队列第4章 串、数组和广义表 第5章 树和二叉树 第6章 图 第7章 查找 第8章 排序 数据:是客观事物的符号表示,指所有能输入到计算机中并...