去面试的一家公司出的面试题,让我回来做完发过去,记录一下
节点类:
//节点类
class Node{
public Node(int value){
this.value = value;
}
public Node(){
}
int value;
Node next;
}
获得随机的链表
//获得一个随机的单链表
public Node getRandomSingList(){
Node head = new Node();
Node n1 = new Node((int)(Math.random()*100));
Node n2 = new Node((int)(Math.random()*100));
Node n3 = new Node((int)(Math.random()*100));
Node n4 = new Node((int)(Math.random()*100));
Node n5 = new Node((int)(Math.random()*100));
n1.next = n2;
n2.next = n3;
n3.next = n4;
n4.next = n5;
head.next = n1;
return head;
}
打印链表
//打印单链表
public void printList(Node head){
String str = "";
for(Node n = head;n!=null;){
str = str + " " + n.value;
n = n.next;
}
System.out.println(str);
}
冒泡排序
//单链表冒泡排序
public Node blueSortList(Node node){
System.out.println("blue start...");
//当前节点
Node cur = node.next;
//下一个节点
Node next = cur.next;
//前一个节点,两节点n1,n2交换位置时需要前一个节点的next指向n2节点
Node upperNode = node;
//一次排序的最后一个节点
Node lastNode = null;
int i = 1;
//当第二个节点为当次排序的最后一个节点时,整体排序结束
while(node.next != lastNode){
//当下一个节点为一次次排序的最后一个节点时,本次排序结束。
if(next == lastNode){
lastNode = cur;
cur = node.next;
next = cur.next;
upperNode = node;
}else if(next.value < cur.value){
cur.next = next.next;
next.next = cur;
upperNode.next = next;
upperNode = next;
}else{
upperNode = cur;
cur = cur.next;
}
next = cur.next;
System.out.println("第" + i++ + "次排列结果:");
printList(node.next);
}
System.out.println("blue end...");
return node;
}
调用
Test t = new Test();
Node randomList = t.getRandomSingList();
System.out.println("排序前:");
t.printList(randomList.next);
System.out.println("====================");
Node sortList = t.blueSortList(randomList);
System.out.println("====================");
System.out.println("排序后:");
t.printList(sortList.next);
分享到:
相关推荐
单链表的冒泡排序,热烈欢迎大家的下载,谢谢谢谢
以上三个知识点总结了关于 Java 排序的一些基本应用,包括基础的冒泡排序算法、使用标准库 `Collections.sort()` 进行排序以及使用 `RuleBasedCollator` 实现国际化排序等。这些技术对于编写高效、可维护的 Java ...
下面我们将详细探讨如何在Java中实现单链表的增、删、改、查功能,以及如何进行选择排序、冒泡排序和反转排序。 1. **单链表的定义**: - 单链表的每个节点通常包括两部分:数据域(存储元素)和指针域(存储下一...
排序是数据处理中的常见任务,有多种不同的排序算法,如冒泡排序、选择排序、插入排序、快速排序等。在这个项目中,你将学习如何在链表上实现这些排序算法。链表排序的一个挑战是其动态性,不像数组那样可以直接访问...
在排序方面,递归可以帮助我们实现各种高效的算法,如冒泡排序、选择排序、插入排序等的递归版本,但最著名的可能是归并排序和快速排序。归并排序利用分治策略,将大数组分成两半,分别排序,然后合并;快速排序则...
1. **冒泡排序**:一种简单的排序方法,通过不断地交换相邻的不正确顺序的元素来逐步排序。时间复杂度为O(n^2)。 2. **选择排序**:每次从未排序的部分找到最小(或最大)元素,放到已排序部分的末尾。时间复杂度也...
在“java版数据结构”中,提到了四种常见的排序算法:插入排序、选择排序、冒泡排序和快速排序。 1. 插入排序:将元素逐个插入到已排序部分,适合小规模或部分有序的数据。 2. 选择排序:每次找到未排序部分的最小...
冒泡排序和选择排序的时间复杂度都是O(N^2),其中冒泡排序是稳定的,而选择排序则不是。插入排序在某些情况下具有较好的性能,其平均时间复杂度为O(N^2),但最好情况下的时间复杂度为O(N)。 第四章涉及栈和队列这两...
3. 排序算法:冒泡排序、选择排序、插入排序、归并排序、快速排序等。 4. 查找算法:顺序查找、折半查找、哈希表查找等。 三、算法 1. 时间和空间复杂度分析:大O符号、时间复杂度、空间复杂度等。 2. 排序算法的...
虽然它的比较次数与冒泡排序相同,但是由于每次交换只需要一次,因此在实际应用中可能会比冒泡排序稍微快一些。 - **插入排序** - **思想**: 插入排序的工作原理是通过构建有序序列,对于未排序数据,在已排序...
9. **排序和查找**:排序算法(如冒泡排序、插入排序、快速排序、归并排序、堆排序)和查找算法(如顺序查找、二分查找、哈希查找)是数据结构中的经典问题。 10. **递归与分治策略**:递归是解决问题的一种重要...
8. 排序算法:包括冒泡排序、选择排序、插入排序、快速排序、归并排序等,它们是数据结构的重要部分,理解它们的工作原理可以帮助优化程序性能。 9. 查找算法:如线性查找、二分查找等,用于在数据集合中寻找特定...
冒泡排序的基本思想是,在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。冒泡排序的时间复杂度为 O(n2),是稳定排序。可用于...
- **排序算法**:包括冒泡排序、插入排序、选择排序、快速排序、归并排序、堆排序等。C、C++和Java都可实现,但Java的Arrays类提供了内置的排序函数。 - **查找算法**:二分查找、哈希查找等,C++的lower_bound/...
9. **排序算法**:包括冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序等。了解每种排序算法的时间复杂度和适用场景对优化程序性能至关重要。 10. **查找算法**:二分查找、哈希查找等,都是提高数据...
排序算法如冒泡排序、选择排序、插入排序、快速排序、归并排序和堆排序等,是数据结构中重要的一部分。查找算法如顺序查找、二分查找和哈希查找则影响了数据的检索效率。 九、哈希表和集合 哈希表,如Java中的...
这里可能包含了各种经典排序算法,如冒泡排序、选择排序、插入排序、快速排序、归并排序和堆排序。了解不同排序算法的时间复杂度和适用场景对于优化代码性能至关重要。 6. **高级数据结构**:除了上述基本数据结构...
9. **第09章 排序(Java版)**: 排序是将一组数据按特定顺序排列的过程,如冒泡排序、选择排序、插入排序、快速排序、归并排序等。这一章会详细讲解这些排序算法的原理和Java实现。 10. **第10章 综合应用设计(Java版...