排序面試 java版

2021-09-11 06:43:18 字數 2602 閱讀 5395

氣泡排序

/**

* 從後往前,不斷向前比較,小的向前面浮起來(交換)

* 如果發現一趟排序沒有交換,那麼flag=false,程式就提前退出了

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

*/private

static

int bubblesort(int arr) }}

return arr;

}

插入排序

/**

* 基本思想:在要排序的一組數中,假設前面n-1個數已經是排好順序的,

* 把第n個數插到前面的有序數中,使得這n個數也是排好順序的。如此反覆迴圈。

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

*/private

static

int insertsort(int arr)

arr[j + 1] = temp;}}

return arr;

}

選擇排序

/**

* 選擇排序的思想是,先假設乙個為最小,然後用剩下的元素去比較

* 如果發現有比假設值小的,先把下標記錄下來,最後再進行交換

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

*/private

static

int selectsort(int arr)

}if (min != i)

}return arr;

}

快速排序

/**

* 快速排序

* 時間複雜度o(n * log(n))

* 優化方式:1三數取中 2優化不必要的交換 3小陣列的方案 4尾遞迴優化

* * @return 返回排序後的陣列

*/private

static

void

quicksort(int arr, int low, int high)

}private

static

intpartition(int arr, int low, int high)

system.out.println("交換" + low + ":" + high);

swap(arr, low, high);

system.out.println(arrays.tostring(arr));

while (low < high && arr[low] <= pivotkey)

swap(arr, low, high);

}return low;

}

希爾排序

/**

* 希爾排序,元素的分組跳躍式排序

* 直接插入排序的改版

* 時間複雜度o(n * log(n))

*/private

static

int shellsort(int arr)

arr[j + inc] = temp;}}

} while (inc > 1);

return arr;

}

歸併排序

/**

* 歸併排序

* 時間複雜度o(n * log(n))

*/private

static

void

mergesort(int arr, int left, int right)

}private

static

void

merge(int arr, int left, int right) else

}//把剩下的元素寫進去

while (i < mid)

while (j < right)

//把臨時陣列的內容拷貝回去

int l = left;

while (l < right)

}

堆排序

/**

* 堆排序是通過不斷構造大頂堆

* 時間複雜度o(n * log(n))

*/private

static

int heapsort(int arr)

for (int i = len; i > 1; i--)

return arr;

}private

static

void

adjust(int arr, int s, int m)

//如果當前的雙親結點是最大的那個,那麼不用繼續調整

if (temp >= arr[i])

//把當前左右結點中的最大值賦值給雙親結點

arr[s] = arr[i];

//以當前最大結點為雙親結點,繼續下一次迴圈,直到找到

//temp應該存放的位置為止

s = i;

}//找到temp應該存放的位置

arr[s] = temp;

}

排序面試 java版

氣泡排序 從後往前,不斷向前比較,小的向前面浮起來 交換 如果發現一趟排序沒有交換,那麼flag false,程式就提前退出了 時間複雜度o n 2 private static int bubblesort int arr return arr 複製 插入排序 基本思想 在要排序的一組數中,假設前...

面試常用演算法總結 排序演算法(java版)

排序演算法 重要性不言而喻,很多演算法問題往往選擇乙個好的排序演算法往往問題可以迎刃而解 氣泡排序 bubble sort 也是一種簡單直觀的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經...

排序演算法 java 版

第一 選擇排序 外層迴圈從第i個位置開始尋找最小值與i 1位置的元素進行交換,最終達到有序狀態。有點遞迴的思想,每次都是在i length中尋找最小值放在i 1的位置 第一層for迴圈,從陣列的索引1處開始向後值陣列結束,尋找最小值。public int selectsortmethod int v...