一、冒泡排序
public static void BubbleSort(int[] nums) {
int len = nums.length;
for(int i = 0; i < len - 1; i++) {
boolean flag = false;
for(int j = 0; j < len - i - 1; j++) {
if(nums[j] > nums[j + 1]) {
int temp = nums[j];
nums[j] = nums[j + 1];
nums[j + 1] = temp;
flag = true;
}
}
if(!flag) {
break;
}
}
}
二、直接插入排序
public static void insertSort(int[] nums) {
if(nums == null || nums.length < 1) {
return;
}
int len = nums.length;
for(int i = 1; i < len - 1; i++) {
int j = i - 1;
int temp = nums[i];
while(j >= 0 && temp < nums[j]) {
nums[j + 1] = nums[j];
j--;
}
nums[j + 1] = temp;
}
}
三、选择排序
public static void selectSort(int[] nums) {
if(nums == null || nums.length < 1) {
return ;
}
int len = nums.length;
for(int i = 0; i < len - 1; i++) {
int index = i;
int min = nums[i];
for (int j = i + 1; j < len; j++) {
if(min > nums[j]) {
index = j;
min = nums[j];
}
}
int temp = nums[index];
nums[index] = nums[i];
nums[i] = temp;
}
}
四、希尔排序(目前不熟悉)
public static void sellSort(int[] nums) {
if(nums == null || nums.length < 1) {
return;
}
int len = nums.length;
int gap = len / 2;
int temp;
while (gap > 0) {
for(int i = gap; i < len; i++) {
temp = nums[i];
int pre = i - gap;
while(pre >= 0 && nums[pre] > temp) {
nums[pre + gap] = nums[pre];
pre = pre - gap;
}
nums[pre + gap] = temp;
}
gap /= 2;
}
}
五、快速排序
public static void quickSort(int[] nums) {
if(nums == null || nums.length < 1) {
return;
}
quickSort(nums, 0, nums.length - 1);
}
private static void quickSort(int[] nums, int left, int right) {
if(left < right) {
int index = nums[left];
int l = left;
int r = right;
while (l < r) {
while(l < r && nums[r] >= index) {
r--;
}
if(l < r) {
nums[l] = nums[r];
l++;
}
while (l < r && nums[l] <= index) {
l++;
}
if(l < r) {
nums[r] = nums[l];
r--;
}
}
nums[l] = index;
quickSort(nums, left, l - 1);
quickSort(nums, l + 1, right);
}
}
六、归并排序
public static void mergeSort(int[] nums) {
if(nums == null && nums.length < 1) {
return;
}
mergeSort(nums, 0, nums.length - 1);
}
private static void mergeSort(int[] nums, int left, int right) {
if(right == left) {
return;
}
int mid = left + ((right - left) >> 1);
mergeSort(nums, left, mid);
mergeSort(nums, mid + 1, right);
merge(nums, left, mid, right);
}
private static void merge(int[] nums, int left, int mid, int right) {
int t = 0;
int[] temp = new int[right - left + 1];
int l = left;
int r = mid + 1;
while(l <= mid && r <= right) {
temp[t++] = nums[l] < nums[r] ? nums[l++] : nums[r++];
}
while (l <= mid) {
temp[t++] = nums[l++];
}
while (r <= right) {
temp[t++] = nums[r++];
}
for(int i = 0; i < temp.length; i++) {
nums[left + i] = temp[i];
}
}
七、堆排序
public static void heapSort(int[] nums) {
if(nums == null && nums.length < 1) {
return;
}
int len = nums.length;
for (int i = len / 2; i >= 0; i--) {
adjustHeap(nums, i, len);
}
for (int j = len - 1; j >= 0; j--) {
swap(nums, 0, j);
adjustHeap(nums, 0, j);
}
}
private static void adjustHeap(int[] nums, int i, int length) {
int temp = nums[i];
for (int k = i * 2 + 1; k < length; k = k * 2 + 1) {
if(k + 1 < length && nums[k] < nums[k + 1]) {
k++;
}
if(nums[k] > temp) {
nums[i] = nums[k];
i = k;
} else {
break;
}
}
nums[i] = temp;
}
private static void swap(int[] nums, int i, int j) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
八、基数排序(未完成)