排序演算法Java實現

2021-08-21 13:41:55 字數 2433 閱讀 5574

選擇排序:

經過第一輪比較得到的最小的記錄,與第乙個記錄的位置交換, 然後對不包括第乙個記錄以外的記錄進行第二輪比較,得到的最小記錄與第二個記錄交換

時間複雜度:o(n^2)

空間複雜度:o(1)

public static void selectsort(int arr)

}arr[index] = arr[i];

arr[i] = min;

}}

快速排序:

對於一組給定的記錄,每一趟排序後,將原來序列分為兩部分,其中前一部分的所有記錄均比後一部分的所有記錄小,然後再依次對前後兩部分記錄進行快速排序

時間複雜度:o(nlogn) 最壞:o(n^2)

空間複雜度:o(nlogn)

public int partition(int a,int start,int

end)

a[start] = std;

return start;

}public void quicksort(int a,int start,int

end)

int index = partition(a,start,end);

quicksort(a,start,index-1);

quicksort(a,index+1,end);

}

堆排序:完全二叉樹

將二叉樹調整為大頂堆,然後將堆的最後乙個元素與堆頂元素(即二叉樹的根結點)進行交換後,堆的最後乙個元素即為最大記錄;接著將前n-1個元素調整為大頂堆,再將堆頂元素與當前堆的最後乙個元素進行交換後得到次大的記錄重複該過程直到調整的堆中只剩乙個元素為止,該元素即為最小記錄,此時可得到乙個有序序列

時間複雜度:o(nlogn)

空間複雜度:o(1)

public

void

heapsort(int a)

for (int i = a.length - 1; i >= 0; i--)

}private

void

swap(int a, int i, int j)

public

void

heapadjust(int arr,int s,int len)

if (tmp > arr[i])

break;

arr[s] = arr[i];

s = i; //s記錄被替換的子結點的索引

}arr[s] = tmp;

}

直接插入排序:

第乙個記錄可以看作是自成乙個有序序列,其餘記錄稱為無序序列。 接著從第二個記錄開始,按照記錄的大小依次將當前處理的記錄插入之前的有序序列中,直到最後乙個記錄插入到有序序列中為止

時間複雜度:o(n^2)

空間複雜度:o(1)

public

static

void

insertsort(int arr)

}arr[j] = curr;

}}

氣泡排序:

從第乙個記錄開始依次對相鄰的兩個記錄進行比較,當前面的記錄大於後面的記錄時,交換位置,進行一輪比較和換位後,n個記錄中最大的記錄將位於第n位,然後對前面的n-1個記錄進行第二輪比較,重複該過程直到進行比較的記錄只剩下乙個為止

時間複雜度:o(n^2)

空間複雜度:o(1)

public

void

bubblesort(int arr)}}

}private

void

swap(int arr, int j, int i)

歸併排序:歸:遞迴,並:分開的資料有序合併

將每兩個相鄰的長度為1的子串行進行歸併,得到n/2個長度為2或1的有序子數列,再將兩兩歸併,反覆執行此過程,直到得到乙個有序序列

時間複雜度:o(nlogn)

空間複雜度:o(n)

public static void mergesort(int arr,int begin,int

end)

}public static void merge(int arr,int begin,int

end,int

mid)else

}while (i <= mid)

while (j <= end)

for (int m = 0;m < temp.length;m++)

}

排序演算法java實現

以下文章 亦風亦塵的空間http blog.csdn.net lschou520 archive 2008 10 29 3176422.aspx 插入排序 package org.rut.util.algorithm.support import org.rut.util.algorithm.sor...

java實現排序演算法

四種排序方式 1.氣泡排序 2.插入排序 3.快速排序 4.歸併排序 author zhaijian public class sorts bubblesort a insertsort a quicksort a mergesort a print a 氣泡排序 兩個迴圈,第乙個迴圈是指要排序的總...

排序演算法java實現

選擇排序類 交換排序類 歸併排序類 附工具類 直接插入排序public class insertionsorter a j tmp arrayutils.printarray a public static super anytype void sort anytype a,int left,int...