排序分类
冒泡排序
class BubbleSort{
public void sort(int[] array){
int temp = 0;
boolean flag = false;
for (int i = 1; i <= array.length -1; i++) {
for (int j = 0; j < array.length - i; j++) {
if (array[j] > array[j+1]){
flag = true;
temp = array[j+1];
array[j+1] = array[j];
array[j] = temp;
}
}
if (!flag){
break;
}else{
flag = false;
}
}
}
}
快速排序
class QuickSort {
public void sort(int[] array,int left,int right) {
if (left > right) {
return;
}else{
int l = left;
int r = right;
int mid = array[l];
while (r > l){
while (array[r] >= mid && l < r) {
r --;
}
if (l < r) {
int temp = array[l];
array[l] = array[r];
array[r] = temp;
l++;
}
while (array[l] <= mid && l < r) {
l ++;
}
if (l < r) {
int temp = array[l];
array[l] = array[r];
array[r] = temp;
r++;
}
}
if (left<l) {
sort(array, l, left - 1);
}
if (r<right) {
sort(array, right + 1, r);
}
}
}
}
简单选择排序
class SelectSort{
public void sort(int[] array){
int min;
int minIndex;
for (int i = 1; i < array.length ; i++) {
min = array[i-1];
minIndex = i-1;
for (int j = i; j < array.length; j++) {
if (min > array[j]){
min = array[j];
minIndex = j;
}
}
if (minIndex != i-1){
array1[minIndex] = array[i-1];
array[i-1] = min;
}
}
}
}
堆排序
class HeapSort {
private void adjustHeap(int[] array, int i, int length) {
int temp = array[i];
for (int k = 2 * i + 1; k < length; k = 2 * k + 1) {
if (k + 1 < length && array[k] < array[k + 1]) {
k++;
}
if (array[k] > temp) {
array[i] = array[k];
i = k;
} else {
break;
}
}
array[i] = temp;
}
public void heapSort(int[] array) {
int temp = 0;
for (int i = array.length / 2 - 1; i >= 0; i--) {
adjustHeap(array, i, array.length);
}
for (int i = array.length - 1; i > 0; i--) {
temp = array[i];
array[i] = array[0];
array[0] = temp;
adjustHeap(array, 0, i);
}
}
}
直接插入排序
class InsertSort {
public void sort(int[] array) {
int insertVal;
int insertIndex;
for (int i = 1; i < array.length; i++) {
insertVal = array[i];
insertIndex = i - 1;
while (insertIndex >= 0 && insertVal < array[insertIndex]) {
array[insertIndex + 1] = array[insertIndex];
insertIndex--;
}
array[insertIndex + 1] = insertVal;
}
}
}
shell排序
class ShellSort {
public void sort(int[] array) {
int temp = 0;
for (int gap = array.length / 2; gap > 0; gap /= 2) {
for (int i = gap; i < array.length; i++) {
for (int j = i - gap; j >= 0; j -= gap) {
if (array[j] > array[j + gap]) {
temp = array[j];
array[j] = array[j + gap];
array[j + gap] = temp;
}
}
}
}
}
}
归并排序
class MergeSort {
public void sort(int[] array) {
sort(array,0,array.length-1);
}
public void sort(int[] array,int left,int right) {
int mid = (left +right )/2;
if (left < right) {
sort(array, left, mid);
sort(array, mid + 1, right);
merge(array, left, mid, right);
}
}
public void merge(int[] a, int left, int mid, int right) {
int[] temp = new int[right-left+1];
int i= left;
int j = mid+1;
int k=0;
while(i<=mid && j<=right){
if(a[i]<a[j]){
temp[k++] = a[i++];
}else{
temp[k++] = a[j++];
}
}
while(i<=mid){
temp[k++] = a[i++];
}
while(j<=right){
temp[k++] = a[j++];
}
for(int x=0;x<temp.length;x++){
a[x+left] = temp[x];
}
}
}
基数(桶)排序
class RadixSort {
public void sort(int[] array) {
int max = array[0];
for (int i = 1; i < array.length; i++) {
if (array[i] > max) {
max = array[i];
}
}
int bits = (max + "").length();
int[][] bucket = new int[10][array.length];
int[] num = new int[10];
for (int i = 0, n = 1; i < bits; i++, n *= 10) {
for (int j = 0; j < array.length; j++) {
int buckeetOrder = array[j] / n % 10;
bucket[buckeetOrder][num[buckeetOrder]] = array[j];
num[buckeetOrder]++;
}
int index = 0;
for (int k = 0; k < num.length; k++) {
if (num[k] != 0) {
for (int j = 0; j < num[k]; j++) {
array[index++] = bucket[k][j];
}
}
num[k] = 0;
}
}
}
}
排序算法的时间复杂度