1、冒泡排序
public void bubbleSort(int[] nums) {
for (int i = 0; i < nums.length; i++) {
for (int j = 0; j < nums.length-1; j++) {
if (nums[j] > nums[j+1]) {
int temp = nums[j];
nums[j] = nums[j+1];
nums[j+1] = temp;
}
}
}
}
2、插入排序
public void insertSort(int[] nums) {
for (int i = 1; i < nums.length; i++) {
int temp = nums[i];
int index = i;
//移动数据,指导找到符合条件的位置,进行插入
while (index > 0 && nums[index-1] > temp) {
nums[index] = nums[index-1];
index--;
}
//插入数据
nums[index] = temp;
}
}
3、希尔排序
又称缩小增量排序,增量数组必须以 1 结尾
public void shellSort(int[] nums, int[] increments) {
for (int i = 0; i < increments.length; i++) {
shellInsert(nums, increments[i]);
}
}
public void shellInsert(int[] nums, int increment) {
for (int i = increment; i < nums.length; i++) {
//index表示开始索引,i表示结束索引,中间为一个增量范围
int index = i - increment;
int temp = nums[i];
while (index >= 0 && nums[index] > temp) {
nums[index+increment] = nums[index];
index-=increment;
}
nums[index] = temp;
}
}
4、简单选择排序
public void selectionSort(int[] nums) {
int index;
for (int i = 0; i < nums.length-1; i++) {
index = i;
for (int j = i+1; j < nums.length; j++) {
if (nums[index] > nums[j]) {
index = j;
}
}
if (i != index) {
int temp = nums[index];
nums[index] = nums[i];
nums[i] = temp;
}
}
}
5、快速排序
public int partition(int[] nums, int left, int right) {
int base = nums[left]; //默认基准数
while (left < right) {
//从右往左,找一个比基准数小的数,并进行交换
while (left < right && base <= nums[right]) { right--;
}
nums[left] = nums[right];
//从左往右,找一个比基准大的数,并进行交换
while (left < right && nums[left] <= base) {
left++;
}
nums[right] = nums[left];
}
nums[left] = base; //后移动left,所以要填充left处的值
return left;
}
public void quickSort(int[] nums, int left, int right) {
if (left < right) {
int partition= partition(nums, left, right);
quickSort(nums, left, partition-1);
quickSort(nums, partition+1, right);
}
}
//调用函数
public void sort(int[] nums) {
quickSort(nums, 0, nums.length-1);
}