public static void mergesort(int a)
public static void mergesort(int a, int start, int end)
// 取中點
int mid = start + (end - start) / 2;
// 遞迴排序左半部分
mergesort(a, start, mid);
// 遞迴排序右半部分
mergesort(a, mid + 1, end);
// 執行到這裡時 [start, mid] [mid + 1, end]已經各自有序 將兩個有序陣列合併為乙個
merge(a, start, mid, end);
}public static void merge(int a, int start, int mid, int end) else
}while (i <= mid)
while (j <= end)
k = 0; i = start;
while (i <= end)
}
public static void quicksort(int a)
public static void quicksort(int a, int start, int end)
// 分割槽方法:將陣列分為三個部分 前半部分的所有數均小於a[pivot] 後半部分的數均大於a[pivot]
int pivot = partition(a, start, end);
// 遞迴排序前半部分
quicksort(a, start, pivot - 1);
// 遞迴排序後半部分
quicksort(a, pivot + 1, end);
}public static int partition(int a, int start, int end)
}// 將最後乙個數放到分割的位置上
swap(a, i, end);
// 返回其索引
return i;
}public static void swap(int a, int i, int j)
// 快速選擇 找到無序陣列中第k大的數
public static int findkthlargest(int a, int k)
public static int quickselect(int a, int start, int end, int k)
int pivot = partition(a, start, end);
if (pivot == k) else if (pivot > k) else
}public static int partition(int a, int start, int end)
}swap(a, i, end);
return i;
}
/**
* 要求陣列中的元素為非負數 且範圍不能太大
*/public static void countingsort(int a)
}// 計算每個元素的個數
int count = new int[max + 1];
for (int num : a)
// 累加個數 count[i]中的值為 <=i的數個數
for (int i = 1; i <= max; i++)
int temp = new int[len];
// 從後向前遍歷 將元素插入到相應位置
for (int i = len - 1; i >= 0; i--)
system.arraycopy(temp, 0, a, 0, len);
}/**
* 假設我們現在需要對 d,a,f,b,c,a,z 這個字串進行排序,
* 要求將其中所有小寫字母都排在大寫字母的前面,
* 但小寫字母內部和大寫字母內部不要求有序。
* 比如經過排序之後為 a,c,z,d,f,b,a,這個如何來實現呢?
* 如果字串中儲存的不僅有大小寫字母,還有數字。
* 要將小寫字母的放到前面,大寫字母放在最後,數字放在中間,
* 不用排序演算法,又該怎麼解決呢?
*/public static void sortchar(char c)
while (!character.islowercase(c[j]))
if (i >= j)
swap(c, i, j);
i++;
j--;
}j = c.length - 1;
while (i < j)
while (character.isuppercase(c[j]))
if (i >= j)
swap(c, i, j);
i++;
j--;
}}public static void swap(char c, int i, int j)
排序演算法 歸併排序 計數排序
1.歸併排序 將待排序序列分成兩個長度相同的子串行,對每個子串行進行排序,直至子串行剩餘乙個數,在將其合併成乙個序列 具體步驟 分組 將待排序序列一分為2,在將子串行進行劃分,直至子串行只有乙個元素 歸併 將每個子串行進行排序,將排好序的兩個子串行進行合併 演算法分析 void merge data...
JS演算法3 排序 歸併排序 快速排序
歸併排序 1.左右兩邊先排序 2.再借助輔助陣列,指標在左右兩個陣列中移動,兩指標作比較,小的就往輔助陣列中填 3.整體在輔助陣列中有序後,拷貝回原陣列。歸併排序 時間複雜度o n logn var list 5 2,6 1,22 77,4 12 console.log 未排序 list funct...
演算法之常見排序演算法 氣泡排序 歸併排序 快速排序
引言 對於程式設計中琳琅滿目的演算法,本人向來是不善此道也不精於此的,而說起排序演算法,也只是會氣泡排序。還記得當初剛做開發工作面試第一家公司時,面試官便讓手寫氣泡排序 入職之後才知道,這面試官就是乙個氣泡排序 病態 愛好者,逢面試必考氣泡排序 後來看吳軍的一些文章,提到提高效率的關鍵就是少做事情不...