Heim  >  Artikel  >  Java  >  10 Beispiele für Sortieralgorithmen in Java

10 Beispiele für Sortieralgorithmen in Java

WBOY
WBOYnach vorne
2022-06-30 17:00:331728Durchsuche

Dieser Artikel vermittelt Ihnen relevantes Wissen über Java. Er organisiert hauptsächlich Probleme im Zusammenhang mit 10 Sortieralgorithmen, einschließlich Blasensortierung, Auswahlsortierung, Einfügungssortierung usw. Wir hoffen, dass es allen hilft.

10 Beispiele für Sortieralgorithmen in Java

Empfohlenes Lernen: „Java-Video-Tutorial

1. Blasensortierung

10 Beispiele für Sortieralgorithmen in Java

import java.util.Arrays;//冒泡排序public class BubbleSort_01 {
	public static void main(String[] args) {
		int a[]={3,44,38,5,47,15,36,26,27,2,46,4,19,50,48};
		//记录比较次数
		int count=0;
		//i=0,第一轮比较
		for (int i = 0; i a[j+1]) {
					int temp=a[j];
					a[j]=a[j+1];
					a[j+1]=temp;
				}
				count++;
			}
		}
		System.out.println(Arrays.toString(a));//[2, 3, 4, 5, 15, 19, 26, 27, 36, 38, 44, 46, 47, 48, 50]
		System.out.println("一共比较了:"+count+"次");//一共比较了:105次
	}}

Optimierung der Blasensortierung 1:

import java.util.Arrays;public class BubbleSort1_01 {
	public static void main(String[] args) {
		int a[]={3,44,38,5,47,15,36,26,27,2,46,4,19,50,48};
		int count=0;
		for (int i = 0; i a[j+1]) {
					int temp=a[j];
					a[j]=a[j+1];
					a[j+1]=temp;
					flag=false;
				}
				count++;
			}
			if (flag) {
				break;
			}
		}
		System.out.println(Arrays.toString(a));// [2, 3, 4, 5, 15, 19, 26, 27, 36, 38, 44, 46, 47, 48, 50]
		System.out.println("一共比较了:"+count+"次");//一共比较了:95次
	}}

2.Sortierung auswählen)

10 Beispiele für Sortieralgorithmen in Java

import java.util.Arrays;//选择排序:先定义一个记录最小元素的下标,然后循环一次后面的,找到最小的元素,最后将他放到前面排序好的序列。public class SelectSort_02 {
	public static void main(String[] args) {
		int a[]={3,44,38,5,47,15,36,26,27,2,46,4,19,50,48};
		for (int i = 0; i <h2> 3. Sortieren einfügen</h2><p><img src="https://img.php.cn/upload/article/000/000/067/b3f75638c97a493ecae2237fc6ea0427-2.gif" alt="10 Beispiele für Sortieralgorithmen in Java"></p><pre class="brush:php;toolbar:false">import java.util.Arrays;//插入排序:定义一个待插入的数,再定义一个待插入数的前一个数的下标,然后拿待插入数与前面的数组一一比较,最后交换。public class InsertSort_03 {
	public static void main(String[] args) {
		int a[]={3,44,38,5,47,15,36,26,27,2,46,4,19,50,48};
		for (int i = 0; i =0 && insertValue <a a insertindex-- system.out.println><h2>4. Shell Sort (Shell Sort)</h2>
<p><img src="https://img.php.cn/upload/article/000/000/067/b3f75638c97a493ecae2237fc6ea0427-3.gif" alt="10 Beispiele für Sortieralgorithmen in Java"></p>
<pre class="brush:php;toolbar:false">import java.util.Arrays;//希尔排序:插入排序的升级public class ShellSort_04 {
	public static void main(String[] args) {
		int a[]={3,44,38,5,47,15,36,26,27,2,46,4,19,50,48};
		int count=0;//比较次数
		for (int gap=a.length / 2; gap > 0; gap = gap / 2) {
			//将整个数组分为若干个子数组
			for (int i = gap; i =0; j=j-gap) {
					//交换元素
					if (a[j]>a[j+gap]) {
						int temp=a[j];
						a[j]=a[j+gap];
						a[j+gap]=temp;
						count++;
					}
				}
			}
		}
		System.out.println(count);//16
		System.out.println(Arrays.toString(a));//[2, 3, 4, 5, 15, 19, 26, 27, 36, 38, 44, 46, 47, 48, 50]
	}}

5. Quick Sort (Schnellsortierung)

Siehe diesen Artikel Blog
10 Beispiele für Sortieralgorithmen in Java
10 Beispiele für Sortieralgorithmen in Java10 Beispiele für Sortieralgorithmen in Java10 Beispiele für Sortieralgorithmen in Java

import java.util.Arrays;//快速排序:冒泡排序的升华版public class QuickSort_05 {
	public static void main(String[] args) {
		//int a[]={50,1,12,2};
		int a[]={3,44,38,5,47,15,36,26,27,2,46,4,19,50,48};
		quicksort(a,0,a.length-1);
		System.out.println(Arrays.toString(a));
	}
	private static void quicksort(int[] a, int low, int high) {
		int i,j;
		if (low>high) {
			return;
		}
		i=low;
		j=high;
		int temp=a[low];//基准位,low=length时,会报异常,java.lang.ArrayIndexOutOfBoundsException: 4 ,所以必须在if判断后面,就跳出方法。
		while(i<j while j-->=a[i] && i<j i if int a quicksort> <h2>6. Zusammenführungssortierung</h2>
<p><img src="https://img.php.cn/upload/article/000/000/067/77209169484aede4f22c59b944a61b0c-8.gif" alt="10 Beispiele für Sortieralgorithmen in Java"></p>
<p><img src="https://img.php.cn/upload/article/000/000/067/77209169484aede4f22c59b944a61b0c-9.png" alt="10 Beispiele für Sortieralgorithmen in Java"></p>
<pre class="brush:php;toolbar:false">import java.util.Arrays;//归并排序public class MergeSort_06 {
	public static void main(String[] args) {
		int a[]={3,44,38,5,47,15,36,26,27,2,46,4,19,50,48};
		//int a[]={5,2,4,7,1,3,2,2};
		int temp[]=new int[a.length];
		mergesort(a,0,a.length-1,temp);
		System.out.println(Arrays.toString(a));
	}
	private static void mergesort(int[] a, int left, int right, int[] temp) {
		//分解
		if (left<right int mergesort merge private while if temp t i j a templeft><h2>7. Heap-Sortierung</h2>
<p>Heap-Sortierung<br> Schritt 1: Erstellen Sie den anfänglichen Heap-BuildHeap, verwenden Sie sink(arr,i, length), um den Wert am oberen Rand des Heaps anzupassen;<br> Schritt 2: Senken Sie das oberste Element des Heaps. Der Zweck besteht darin, das größte Element an die Spitze des Heaps zu verschieben und es dann mit sink(arr, 0,length) anzupassen 8. Anzahl sortieren erscheint, wird im i-ten Element des Arrays count gespeichert <br><br> Alle Zählungen akkumulieren (beginnend mit dem ersten Element in count wird jedes Element zum vorherigen Element hinzugefügt) <img src="https://img.php.cn/upload/article/000/000/067/77209169484aede4f22c59b944a61b0c-10.gif" alt="10 Beispiele für Sortieralgorithmen in Java"></p> Umgekehrtes Füllen Zielarray: Platzieren Sie jedes Element i in der Zählung [i]tes Element des neuen Arrays und subtrahieren count [i] jedes Mal, wenn ein Element platziert wird<h2></h2>
<p><br></p>
<pre class="brush:php;toolbar:false">public class Heap_Sort_07 {
	public static void main(String[] args) {
		int a[]={3,44,38,5,47,15,36,26,27,2,46,4,19,50,48};	
		sort(a);
		System.out.println(Arrays.toString(a));
	}
    public static void sort(int[] arr) {
        int length = arr.length;
        //构建堆
        buildHeap(arr,length);
        for ( int i = length - 1; i > 0; i-- ) {
            //将堆顶元素与末位元素调换
            int temp = arr[0];
            arr[0] = arr[i];
            arr[i] = temp;
            //数组长度-1 隐藏堆尾元素
            length--;
            //将堆顶元素下沉 目的是将最大的元素浮到堆顶来
            sink(arr, 0,length);
        }
    }
    private static void buildHeap(int[] arr, int length) {
        for (int i = length / 2; i >= 0; i--) {
            sink(arr,i, length);
        }
    }
    
    private static void sink(int[] arr, int index, int length) {
        int leftChild = 2 * index + 1;//左子节点下标
        int rightChild = 2 * index + 2;//右子节点下标
        int present = index;//要调整的节点下标

        //下沉左边
        if (leftChild  arr[present]) {
            present = leftChild;
        }

        //下沉右边
        if (rightChild  arr[present]) {
            present = rightChild;
        }

        //如果下标不相等 证明调换过了
        if (present != index) {
            //交换值
            int temp = arr[index];
            arr[index] = arr[present];
            arr[present] = temp;

            //继续下沉
            sink(arr, present, length);
        }
    }}
    9. Bucket-Sortierung
  • Referenzlink
  • Bucket-Sortierung kann als eine verbesserte Version des Zählens angesehen werden Sortieren. Die zu sortierenden Daten werden in mehrere geordnete Buckets unterteilt. Die Daten in jedem Bucket werden dann nacheinander herausgenommen.
  • Bucket-Sortierung: Platzieren Sie das Element mit dem Wert i in Bucket i und schütten Sie schließlich die Elemente im Bucket nacheinander aus.
  • Idee für die Reihenfolge der Eimersortierung:
    • 设置一个定量的数组当作空桶子。
    • 寻访序列,并且把项目一个一个放到对应的桶子去。
    • 对每个不是空的桶子进行排序。
    • 从不是空的桶子里把项目再放回原来的序列中。
public class BucketSort_09 {
    public static void sort(int[] arr){
        //最大最小值
        int max = arr[0];
        int min = arr[0];
        int length = arr.length;

        for(int i=1; i<length> max) {
                max = arr[i];
            } else if(arr[i] > bucketList = new ArrayList();
        for(int i = 0; i ());
        }

        //每个桶的存数区间
        float section = (float) diff / (float) (length - 1);

        //数据入桶
        for(int i = 0; i  arrayList : bucketList){
            for(int value : arrayList){
                arr[index] = value;
                index++;
            }
        }
    }}</length>

10.基数排序(Raix Sort)

我们假设有一个待排序数组[53,3,542,748,14,214],那么如何使用基数排序对其进行排序呢?
首先我们有这样的十个一维数组,在基数排序中也叫桶。用桶排序实现。
10 Beispiele für Sortieralgorithmen in Java第一轮,以元素的个位数进行区分:[542,53,3,14,214,748]
10 Beispiele für Sortieralgorithmen in Java第二轮,以元素的十位数进行区分:[3,14,214,542,748,53]10 Beispiele für Sortieralgorithmen in Java第三轮,以元素的百位数进行区分:[3,14,53,214,542,748]
10 Beispiele für Sortieralgorithmen in Java

import java.util.Arrays;public class RaixSort_10 {
	public static void main(String[] args) {
		int[] arr = { 53, 3, 542, 748, 14, 214 };

		// 得到数组中最大的数
		int max = arr[0];// 假设第一个数就是数组中的最大数
		for (int i = 1; i  max) {
				max = arr[i];
			}
		}
		// 得到最大数是几位数
		// 通过拼接一个空串将其变为字符串进而求得字符串的长度,即为位数
		int maxLength = (max + "").length();

		// 定义一个二维数组,模拟桶,每个桶就是一个一维数组
		// 为了防止放入数据的时候桶溢出,我们应该尽量将桶的容量设置得大一些
		int[][] bucket = new int[10][arr.length];
		// 记录每个桶中实际存放的元素个数
		// 定义一个一维数组来记录每个桶中每次放入的元素个数
		int[] bucketElementCounts = new int[10];

		// 通过变量n帮助取出元素位数上的数
		for (int i = 0, n = 1; i <p><em>基数排序是用空间换时间的经典算法,当数据足够多时,达到几千万级别时内存空间可能不够用了,发生堆内存溢出</em></p><p><img src="https://img.php.cn/upload/article/000/000/067/a246d223e83788646627bce4ca8e0ab1-17.png" alt="10 Beispiele für Sortieralgorithmen in Java"></p><p>推荐学习:《<a href="https://www.php.cn/course/list/36.html" target="_blank">java视频教程</a>》</p>

Das obige ist der detaillierte Inhalt von10 Beispiele für Sortieralgorithmen in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen