八大排序演算法Java實現

2021-09-14 08:09:25 字數 3097 閱讀 7958

常見的八大排序演算法,它們之間的關係如下:

經常碰到這樣一類排序問題:把新的資料插入到已經排好的資料列中。

將第乙個數和第二個數排序,然後構成乙個有序序列

將第三個數插入進去,構成乙個新的有序序列。

對第四個數、第五個數……直到最後乙個數,重複第二步。

首先設定插入次數,即迴圈次數,for(int i=1;i設定插入數和得到已經排好序列的最後乙個數的位數。insertnum和j=i-1。

從最後乙個數開始向前迴圈,如果插入數小於當前數,就將當前數向後移動一位。

將當前數放置到空著的位置,即j+1。

public void insertsort(int a)

a[j+1]=insertnum;//將需要插入的數放在要插入的位置。}}

對於直接插入排序問題,資料量巨大時。

將數的個數設為n,取奇數k=n/2,將下標差值為k的書分為一組,構成有序序列。

再取k=k/2 ,將下標差值為k的書分為一組,構成有序序列。

重複第二步,直到k=1執行簡單插入排序。

首先確定分的組數。

然後對組中元素進行插入排序。

然後將length/2,重複1,2步,直到length=0為止。

public  void sheelsort(int a)

a[j + d] = temp;}}

}}

常用於取序列中最大最小的幾個數時。

(如果每次比較都交換,那麼就是交換排序;如果每次比較完乙個迴圈再交換,就是簡單選擇排序。)

遍歷整個序列,將最小的數放在最前面。

遍歷剩下的序列,將最小的數放在最前面。

重複第二步,直到只剩下乙個數。

首先確定迴圈次數,並且記住當前數字和當前位置。

將當前位置後面所有的數與當前數字進行對比,小數賦值給key,並記住小數的位置。

比對完成後,將最小的值與第乙個數的值交換。

重複2、3步。

public void selectsort(int a) 

}a[position]=a[i];//交換位置

a[i]=key;}}

對簡單選擇排序的優化。

將序列構建成大頂堆。

將根節點與最後乙個節點交換,然後斷開最後乙個節點。

重複第一、二步,直到所有節點斷開。

public  void heapsort(int a)}}

}

要求時間最快時。

選擇第乙個數為p,小於p的數放在左邊,大於p的數放在右邊。

遞迴的將p左邊和右邊的數都按照第一步進行,直到不能遞迴。

public static void quicksort(int numbers, int start, int end)    

} while (i <= j);

if (start < j)

quicksort(numbers, start, j);

if (end > i)

quicksort(numbers, i, end);

}

}

速度僅次於快排,記憶體少的時候使用,可以進行平行計算的時候使用。

選擇相鄰兩個數組成乙個有序序列。

選擇相鄰的兩個有序序列組成乙個有序序列。

重複第二步,直到全部組成乙個有序序列。

public static void mergesort(int numbers, int left, int right)    

if (i + (s - 1) < right)

merge(numbers, i, i + (s - 1), right);

}

}

private static void merge(int data, int p, int q, int r) else

k++;

}

if (s == q + 1)

b[k++] = data[t++];

else

b[k++] = data[s++];

for (int i = p; i <= r; i++)

data[i] = b[i];

}

用於大量數,很長的數進行排序時。

將所有的數的個位數取出,按照個位數進行排序,構成乙個序列。

將新構成的所有的數的十位數取出,按照十位數進行排序,構成乙個序列。

public void sort(int array) 

}int time = 0;

//判斷位數;

while (max > 0)

//建立10個佇列;

listqueue = new arraylist();

for (int i = 0; i < 10; i++)

//進行time次分配和收集;

for (int i = 0; i < time; i++)

int count = 0;//元素計數器;

//收集佇列元素;

for (int k = 0; k < 10; k++) }}

}

八大排序演算法java

本文只介紹演算法實現的 預設都這一已經理解演算法思想,若不理解可以參考八大排序演算法思想 交換兩個數 public static void swap int arr,int i,int j 氣泡排序 public static void bubblesort int arr for int i 0 ...

java八大排序演算法

學習左程雲演算法課初級班 1,歸併排序,這是分治的思想,例如有乙個陣列,先將左半部分排好序,再將右半部分排好序,最後再將兩邊的數通過乙個輔助陣列將它們逐個放到輔助陣列裡面,這個過程中逐漸比較兩邊頭位置的數的大小。求乙個陣列的中間位置,可以int mid l r l 1 右移運算 位運算 速度快一些。...

八大排序演算法的Java實現

直接插入排序 穩定排序,時間複雜度 o n o n 2 適用於少量元素。基本思想 將乙個元素插入到已排好序的列表中。public static void insertsort int array array j 1 key shell排序 不穩定,o nlogn 基本思想 把整個列表分成若干個子串行...