冒泡排序
//从小到大
public void sort(int[] nums) {
for (int i = 0; i < nums.length - 1; i++) {
//一次循环找到最大值放最后
for (int j = 0; j < nums.length - 1 - i; j++) {
if (nums[j] > nums[j + 1]) {
nums[j] = nums[j] ^ nums[j + 1];
nums[j + 1] = nums[j] ^ nums[j + 1];
nums[j] = nums[j] ^ nums[j + 1];
}
}
}
for (int i = 0; i < nums.length; i++) {
System.out.println(nums[i]);
}
}
选择排序
//从小到大
public void sort(int[] nums) {
for (int i = 0; i < nums.length - 1; i++) {
int index = i;
//i和后面到比较,拿到个最小值放前面
for (int j = i; j < nums.length-1; j++) {
if (nums[index] > nums[j + 1]) {
index = j + 1;
}
}
if (index != i) {
nums[i] = nums[i] ^ nums[index];
nums[index] = nums[i] ^ nums[index];
nums[i] = nums[i] ^ nums[index];
}
}
for (int i = 0; i < nums.length; i++) {
System.out.println(nums[i]);
}
}
插入排序
//从小到大
public void sort(int[] nums) {
for (int i = 1; i < nums.length; i++) {
int temp = nums[i];
int left = i-1;
while (left >= 0 && nums[left]>temp){
nums[left+1] = nums[left];
left--;
}
nums[left+1] = temp;
}
for (int i = 0; i < nums.length; i++) {
System.out.println(nums[i]);
}
}
快速排序
写法一
private int[] sort(int[] nums, int start, int end) {
if (nums == null || nums.length == 0) {
return nums;
}
if (start >= end) {
return nums;
}
int mid = nums[start];
int low = start;
int high = end;
while (low < high) {
while (low < high && nums[high] > mid) {
high--;
}
nums[low] = nums[high];
while (low < high && nums[low] < mid) {
low++;
}
nums[high] = nums[low];
}
nums[low] = mid;
sort(nums, start, low - 1);
sort(nums, low + 1, end);
return nums;
}
写法二
private void quickSort(int[] arr, int low, int high) {
if (low < high) {
int index = getIndex(arr, low, high);
quickSort(arr, low, index - 1);
quickSort(arr, index + 1, high);
}
}
private int getIndex(int[] arr, int low, int high) {
int tmp = arr[low];
while (low < high) {
while (low < high && arr[high] >= tmp) {
high--;
}
arr[low] = arr[high];
while (low < high && arr[low] <= tmp) {
low++;
}
arr[high] = arr[low];
}
arr[low] = tmp;
return low;
}