迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Java >

在 Java 中的冒泡排序算法对手动链表进行排序

作者:迹忆客 最近更新:2023/10/10 浏览次数:

冒泡排序是用于对数据集合进行排序的最常见的数据结构算法。它通过以错误的顺序迭代和交换相邻元素直到它们正确来起作用。

我们将首先向你展示基本的排序演示。然后我们将实现两个冒泡排序算法来对 Java 中的链表进行排序。


Java 中的冒泡排序

让我们保持基本的东西,而不涉及排序的算术方面。我们将在冒泡排序中从头到尾遍历一个数组。

然后只有它可以将当前索引与下一个索引进行比较。该公式的核心概念是当当前元素的大小大于下一个元素时。

语法:

for (int A = 0; A < sort - 1; A++)
for (int B = 0; B < sort - A - 1; B++)
if (DEMO[B] > DEMO[B + 1]){
// Swapping of array
	int temp = DEMO[B];
DEMO[B] = DEMO[B + 1];
DEMO[B + 1] = temp;
}

现在让我们在 Java 中执行一个简单的冒泡排序算法。但首先,看看数组未排序索引的初始状态。

数组:{43, 65, 21, 64, 12, 6, 1}

以下代码块将通过应用此基本排序算法对此数组索引执行冒泡排序。

值得一提的是,我们总是可以根据自己的要求修改这个公式。但是,此时核心应该保持基本以形成清晰。

代码:

//In this program, we will sort an array DEMO using the bubble sort algorithm
//Main class
public class BubbleSortLinkListExample1
{
	//Main function
	private void bubbleSort(int DEMO[])
	{
		//Using .length to determine entire length of array's index
		int sort = DEMO.length;
		//If array's length is less than int sort, increase it by 1
		for (int A = 0; A < sort-1; A++)
			//Formula 1
			for (int B = 0; B < sort-A-1; B++)
				if (DEMO[B] > DEMO[B+1])
				{
					// Swapping of array
					int temp = DEMO[B];
					DEMO[B] = DEMO[B+1];
					DEMO[B+1] = temp;
				}
	}
	/* Now we are going to print DEMO array*/
	void printArray(int DEMO[])
	{
		int sort = DEMO.length;
		for (int A=0; A<sort; ++A)
			System.out.print(DEMO[A] + " ");
		System.out.println();
	}
	// We are going to implement a driver algorithm for sorting our DEMO array
	public static void main(String args[])
	{
		BubbleSortLinkListExample1 ob = new BubbleSortLinkListExample1();
		int DEMO[] = {43, 65, 21, 64, 12, 6, 1};
		ob.bubbleSort(DEMO);
		System.out.println("After the array has been sorted!");
		ob.printArray(DEMO);
	}
}

对这个数组进行升序排序后,我们得到 Java 的输出。

输出:

After the array has been sorted!
1 6 12 21 43 64 65

Java 中的冒泡排序手动链表

链表手动排序也是冒泡排序中一种直接的方法。

我们之前讨论过遍历数据吗?现在,我们将实践它。

节点允许我们将数据从一个节点遍历到下一个节点。

看看我们下面的演示模型。由于我们在前面的示例中确实执行了排序,因此在这里强调节点非常重要。

冒泡排序节点演示


Java 中的类排序链表

正如我们所理解的,我们应用这个类来形成 Java 中的节点。

代码:

class SortLL {
	public static class Mynode {
		int indx;
		Mynode fwdMynode;

		public Mynode(int indx) {
			this.indx = indx;
			this.fwdMynode = null;
		}
		public int getindx() {
			return this.indx;
		}
	}

你可以单独使用这些类并调用它们的对象,但这是一种冗长而复杂的方式。因此,我们将所有类保存在一个文件中。

同样,我们将使用 .getNextNode() 函数,它检索下一个不带参数的类元素。你必须熟悉这个概念,所以让我们执行手动冒泡排序算法,不用多说。

  1. 排序之前的链表:

    手动冒泡排序前的链表

    代码:

    class SortLL {
    	public static class Mynode {
    		int indx;
    		Mynode fwdMynode;
    
    		public Mynode(int indx) {
    			this.indx = indx;
    			this.fwdMynode = null;
    		}
    		public int getindx() {
    			return this.indx;
    		}
    	}
    	// My node class
    	private Mynode head;
    	private int size;
    	public SortLL(){
    		this.head = null;
    		this.size = 0;
    	}
    	public void add(int indx) {
    		Mynode Mynode = new Mynode(indx);
    		if (head == null) {
    			head = Mynode;
    		} else {
    			Mynode CN = head;
    			while(CN.fwdMynode != null) {
    				CN = CN.fwdMynode;
    			}
    			CN.fwdMynode = Mynode;
    		}
    		size++;
    	}
    	public void sort() {
    		if (size > 1) {
    			boolean dtr;
    			do {
    				Mynode thisMynode = head;
    				Mynode ladtMynode = null;
    				Mynode fwd = head.fwdMynode;
    				dtr = false;
    
    				while ( fwd != null ) {
    					if (thisMynode.indx > fwd.indx) {
    						dtr = true;
    						if ( ladtMynode != null ) {
    							Mynode sig = fwd.fwdMynode;
    
    							ladtMynode.fwdMynode = fwd;
    							fwd.fwdMynode = thisMynode;
    							thisMynode.fwdMynode = sig;
    						} else {
    							Mynode sig = fwd.fwdMynode;
    							head = fwd;
    							fwd.fwdMynode = thisMynode;
    							thisMynode.fwdMynode = sig;
    						}
    						ladtMynode = fwd;
    						fwd = thisMynode.fwdMynode;
    					} else {
    						ladtMynode = thisMynode;
    						thisMynode = fwd;
    						fwd = fwd.fwdMynode;
    					}
    				}
    			} while( dtr );
    		}
    	}
    	public int listSize() {
    		return size;
    	}
    	public void printindx() {
    		Mynode CN = head;
    
    		while(CN != null) {
    			int indx = CN.getindx();
    			System.out.print(indx + " ");
    			CN = CN.fwdMynode;
    		}
    		System.out.println();
    	}
    	public boolean isEmpty() {
    		return size == 0;
    	}
    }
    // indxInterface class
    class SrtBubb {
    	public static void main (String[]args) {
    		SortLL s = new SortLL();
    		s.add(12);
    		s.add(2);
    		s.add(7);
    		s.add(19);
    		s.add(23);
    		s.add(9);
    		System.out.println("Before Performing Bubble Sort");
    		s.printindx();
    		s.sort();
    		System.out.println("After Performing Bubble Sort");
    		s.printindx();
    		System.out.println("Size of the linked list is: " + s.listSize());
    	}
    }
    
  2. 执行手动冒泡排序后:

    手动冒泡排序后的链接列表

    输出:

    Before Performing Bubble Sort
    12 2 7 19 23 9
    After Performing Bubble Sort
    2 7 9 12 19 23
    Size of the linked list is: 6
    

你可以根据你的要求修改此程序。但这是初学者理解使用冒泡排序对链表进行手动排序的最实用的方法。

假设你仍然对这个话题感到困惑。我们还为你提供了文件目录中的代码。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

如何在 Java 中延迟几秒钟的时间

发布时间:2023/12/17 浏览次数:217 分类:Java

本篇文章主要介绍如何在 Java 中制造程序延迟。本教程介绍了如何在 Java 中制造程序延时,并列举了一些示例代码来了解它。

如何在 Java 中把 Hashmap 转换为 JSON 对象

发布时间:2023/12/17 浏览次数:187 分类:Java

它描述了允许我们将哈希图转换为简单的 JSON 对象的方法。本文介绍了在 Java 中把 Hashmap 转换为 JSON 对象的方法。我们将看到关于创建一个 hashmap,然后将其转换为 JSON 对象的详细例子。

如何在 Java 中按值排序 Map

发布时间:2023/12/17 浏览次数:171 分类:Java

本文介绍了如何在 Java 中按值对 Map 进行排序。本教程介绍了如何在 Java 中按值对 Map 进行排序,并列出了一些示例代码来理解它。

如何在 Java 中打印 HashMap

发布时间:2023/12/17 浏览次数:192 分类:Java

本帖介绍了如何在 Java 中打印 HashMap。本教程介绍了如何在 Java 中打印 HashMap 元素,还列举了一些示例代码来理解这个主题。

在 Java 中更新 Hashmap 的值

发布时间:2023/12/17 浏览次数:146 分类:Java

本文介绍了如何在 Java 中更新 HashMap 中的一个值。本文介绍了如何在 Java 中使用 HashMap 类中包含的两个方法-put() 和 replace() 更新 HashMap 中的值。

Java 中的 hashmap 和 map 之间的区别

发布时间:2023/12/17 浏览次数:79 分类:Java

本文介绍了 Java 中的 hashmap 和 map 接口之间的区别。本教程介绍了 Java 中 Map 和 HashMap 之间的主要区别。在 Java 中,Map 是用于以键值对存储数据的接口,

在 Java 中获取用户主目录

发布时间:2023/12/17 浏览次数:218 分类:Java

这篇文章向你展示了如何在 Java 中获取用户主目录。本教程介绍了如何在 Java 中获取用户主目录,并列出了一些示例代码以指导你完成该主题。

Java 中 size 和 length 的区别

发布时间:2023/12/17 浏览次数:179 分类:Java

这篇文章教你如何知道 Java 中大小和长度之间的区别。本教程介绍了 Java 中大小和长度之间的区别。我们还列出了一些示例代码以帮助你理解该主题。

Java 中的互斥锁

发布时间:2023/12/17 浏览次数:111 分类:Java

了解有关 Java 中互斥锁的一切,在计算机科学领域,互斥或互斥被称为并发控制的属性。每台计算机都使用称为线程的最小程序指令序列。有一次,计算机在一个线程上工作。为了更好地理解,

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便