Java常見的排序演算法

2021-07-23 19:22:08 字數 3904 閱讀 5421

氣泡排序演算法的運作如下:(假定從後往前)

(比較相鄰的元素。如果第乙個比第二個大或小,就交換他們兩個的位置)

將序列中所有元素兩兩比較,將最大的放在最後面。

將剩餘序列中所有元素兩兩比較,將最大的放在最後面。

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

**實現:

1. 設定迴圈次數。

2. 設定開始比較的位數,和結束的位數。

3. 兩兩比較,將最小的放到前面去。

4. 重複2、3步,直到迴圈次數完畢。

總結:相鄰的元素兩兩比較,大的放在後面,直到只剩下乙個數。

public

static

void

bubblesort(int a)}}

}

快速排序法的運算如下:

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

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

要求的時間是最快排序的時候使用。

總結:選擇乙個開始數a,小於a的數放在左邊,大於a的數放在右邊,然後遞迴到最後乙個數。

**實現:

public

static

void

quicksort(int a,int start,int end)

} while (i <= j);

if(startif(end>j)

}}

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

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

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

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

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

**實現:

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

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

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

4. 重複2、3步。

總結:遍歷整個序列,取到最小值的數放在第一位,然後迴圈遍歷剩下的序列,直到最後乙個數。

public

void

selectsort(int a)

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

a[i]=value;

}}

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

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

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

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

**實現:

1. 首先確定分的組數。

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

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

總結:把陣列按一定規則構成乙個新的有序序列,再按規則進行簡單插入排序。

public

void

sheelsort(int a)

a[j + d] = temp;}}

} }

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

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

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

**實現:

1. 首先設定插入次數,即迴圈次數,1個數的那次不用插入。

2. 設定插入數和得到已經排好序列的最後乙個數的位數。insertnum和j=i-1。

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

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

總結:選擇兩個數構成乙個新的有序序列,把剩下的數分別插入進去,構成乙個新的有序序列,直到全部數都插入進去,構成乙個有序序列。

public void insertsort(int a)

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

}}

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

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

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

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

總結:選擇相鄰的兩個數構成一串行,選擇相鄰的兩個序列構成一串行,迴圈直到全部構成乙個有序序列。

**實現:

public

static

void

mergesort(int numbers,int left,int right)

if(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];

}

對簡單選擇排序的優化。

1. 將序列構建成大頂堆。

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

3. 重複第

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

總結:把有序序列構成乙個堆,根節點與最後的乙個節點交換,直到所有節點斷開。

**實現:

public

void

heapsort(int a)

}private

void

swap(int data, int i, int j)

//對data陣列從0到lastindex建大頂堆

private

void

buildmaxheap(int data, int lastindex)

}//如果k節點的值小於其較大的子節點的值

if(data[k]//交換他們

swap(data,k,biggerindex);

//將biggerindex賦予k,開始while迴圈的下一次迴圈,重新保證k節點的值大於其左右子節點的值

k=biggerindex;

}else}}

}

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

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

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

總結:把數的個位和十位取出來,按照個位數和十位數進行排序,構成乙個新的有序序列。

**實現:

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常見排序演算法

package algorithms public class arraydemo int max getmax arr arr sort2 arr int start 0 int end arr.length 1 sort3 arr,start,end print arr public stati...

Java常見排序演算法

氣泡排序 氣泡排序是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢 浮 到數列的頂端。public static vo...

java常見排序演算法

1.直接插入排序 public static void insertsort int array array j 1 temp system.out.println arrays.tostring array insertsort 2.希爾排序 希爾排序,也稱遞減增量排序演算法,是插入排序的一種更高...