快速排序
public static void quickSort(int[] nums,int start,int end){
if (start > end) {
return;
}
int index = partition1(nums,start, end);
quickSort(nums,index+1,end);
quickSort(nums,start,index-1);
}
private static int partition1(int[] nums, int start, int end) {
int left = start;
int right = end;
int pivot = nums[start];
while (left < right) {
while (left < right && nums[right] >= pivot) {
right--;
}
nums[left] = nums[right];
while (left < right && nums[left] <= pivot) {
left++;
}
nums[right] = nums[left];
}
nums[left] = pivot;
return left;
}
冒泡
public static void bubbleSort(int[] nums) {
int n = nums.length;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n - 1 - i; j++) {
if (nums[j] > nums[j + 1]) {
swap(nums, j, j + 1);
}
}
}
}
选择
public static void selectSort(int[] nums){
int n = nums.length;
for (int i = 0; i < n; i++) {
int currMinIndex = i;
for (int j = i; j < n-1; j++) {
if (nums[currMinIndex]>nums[j+1]){
currMinIndex = j+1;
}
}
swap(nums,currMinIndex,i);
}
}
插入
public static void insertSort(int[] nums) {
int n = nums.length;
for (int i = 0; i < n - 1; i++) {
int currNum = nums[i + 1];
int prev = i;
while (prev >= 0 && currNum < nums[prev]) {
nums[prev + 1] = nums[prev];
prev--;
}
nums[prev + 1] = currNum;
}
}
希尔
public static void shellSort(int[] nums) {
int n = nums.length;
int gap = n / 2;
while (gap > 0) {
for (int i = gap; i < n; i++) {
int temp = nums[i];
int prev = i-gap;
while (prev>=0&&nums[prev] > temp) {
nums[prev+gap] = nums[prev];
prev -= gap;
}
nums[prev+gap] = temp;
}
gap /= 2;
}
}