首先感謝同學們的留言Thanks♪(・ω・)ノ,這篇文章也是應同學的邀請,簡單寫一下常用的排序算法,後續還會持續更新
1.第一個–選擇排序,面試的時候也是有人問過的
說白了就是遍歷數組,找出最小的,交換位置
/**選擇排序
*遍歷數組 然後每次遍歷到一個元素之後 繼續遍歷該元素之後的所有元素 然後找到最小的元素 和其換位置
*/
public static int[] select(int[] array){
for (int i = 0; i < array.length; i++) {
int minPos = i;
for (int j = i + 1; j < array.length; j++) {
if (array[j] < array[minPos]){
minPos = j;
}
}
if (array[i] > array[minPos]) {
int temp = array[i];
array[i] = array[minPos];
array[minPos] = temp;
}
}
return array;
}
2.第二個–插入排序,
依然是遍歷,倆倆比較,兩層循環全遍歷一遍
/**插入排序
*相當於 從0開始一直++ 然後一直排列索引跟之前的元素
*/
public static int[] insert(int[] array) {
for (int i = 1; i < array.length; i++) {
int temp = array[i];
for (int j = i - 1; j >= 0 ; j--) {
if (array[j] > temp ) {
array[j + 1] = array[j];
array[j] = temp;
}
}
}
return array;
}
前面這兩種代碼層級看起來也不那麼簡單,也是比較常用到的
3.第三個–快速排序
顧名思義,那就是快唄,選定一個元素,把比他小的放左邊,比他大的扔在右邊,循環遍歷
/**
* 快速排序
* 在快排中要設定分水嶺 就是隨機一個元素 然後比他小的放置到其左邊 比其大的在有邊 循環往復
*/
public static int[] quick(int[] array) {
int length = array.length - 1;
sortQuick(array, 0, length);
return array;
}
private static void sortQuick(int[] array, int low, int length) {
if (low < length) {
int div = firstRun(array, low, length);
sortQuick(array, 0, div - 1);
sortQuick(array, div + 1, length);
}
}
private static int firstRun(int[] array, int low, int length) {
int base = array[low];
while (low < length) {
while (array[length] > base) {
length--;
}
swrap(array, low, length);
while (array[low] < base) {
low++;
}
swrap(array, low, length);
}
return low;
}
private static void swrap(int[] array, int low, int length) {
int temp = array[length];
array[length] = array[low];
array[low] = temp;
//return array;
}
還有很多種排序算法,後續再補上吧
接下來說一下,有很多同學問我,在Android studio的Android項目中,怎麼運行java的main方法呢
先貼上代碼
private static int[] a = new int[]{1,2,345,98,209,1000,24,26789};
public static void main(String[] args) {
// select(a);
insert(a);
// quick(a);
System.out.println("OK");
}
/**選擇排序
*遍歷數組 然後每次遍歷到一個元素之後 繼續遍歷該元素之後的所有元素 然後找到最小的元素 和其換位置
*/
public static int[] select(int[] array){
for (int i = 0; i < array.length; i++) {
int minPos = i;
for (int j = i + 1; j < array.length; j++) {
if (array[j] < array[minPos]){
minPos = j;
}
}
if (array[i] > array[minPos]) {
int temp = array[i];
array[i] = array[minPos];
array[minPos] = temp;
}
}
return array;
}
/**插入排序
*相當於 從0開始一直++ 然後一直排列索引跟之前的元素
*/
public static int[] insert(int[] array) {
for (int i = 1; i < array.length; i++) {
int temp = array[i];
for (int j = i - 1; j >= 0 ; j--) {
if (array[j] > temp ) {
array[j + 1] = array[j];
array[j] = temp;
}
}
}
return array;
}
/**
* 快速排序
* 在快排中要設定分水嶺 就是隨機一個元素 然後比他小的放置到其左邊 比其大的在有邊 循環往復
*/
public static int[] quick(int[] array) {
int length = array.length - 1;
sortQuick(array, 0, length);
return array;
}
private static void sortQuick(int[] array, int low, int length) {
if (low < length) {
int div = firstRun(array, low, length);
sortQuick(array, 0, div - 1);
sortQuick(array, div + 1, length);
}
}
private static int firstRun(int[] array, int low, int length) {
int base = array[low];
while (low < length) {
while (array[length] > base) {
length--;
}
swrap(array, low, length);
while (array[low] < base) {
low++;
}
swrap(array, low, length);
}
return low;
}
private static void swrap(int[] array, int low, int length) {
int temp = array[length];
array[length] = array[low];
array[low] = temp;
//return array;
}
我們可以看到main方法,那麼怎麼運行呢
很簡單了吧,run就是正常運行,debug自然就是可以斷點調試了,有不懂的可以私信我
有什麼需要講解的,歡迎私信留言,我會竭盡全力解決,畢竟我也是個菜鳥,哈哈😁