题目:912. 排序数组
给你一个整数数组 nums,请你将该数组升序排列。
使用选择排序解决
public static int[] sortArray(int[] nums) {
//判断数组是否为空 或者只有一个元素
if(nums.length <2 | nums == null) {
return nums;
}
//循环数组 比较大小 这里i< length-1 下面的j才不会发生数组越界 而且外层循环只需遍历length-1次即可
for(int i = 0; i <nums.length-1; i ++) {
int minIndex = i;
for(int j = i+1; j < nums.length; j++) {
minIndex = nums[j] < nums[minIndex] ? j : minIndex;
}
if(i != minIndex) {
swap(nums,i,minIndex);
}
}
return nums;
}
public static void swap(int[] nums,int i ,int minIndex) {
int temp = nums[i];
nums[i] = nums[minIndex];
nums[minIndex] = temp;
}
emmm 一提交 显示超出运行时间
最后只能改用快速排序来解决…
public int[] sortArray(int[] nums) {
quickSort(nums, 0, nums.length - 1);
return nums;
}
private void quickSort(int[] nums, int left, int right) {
if (left >= right) {
return;
}
int pivot = findPivotAndReorder(nums, left, right);
quickSort(nums, left, pivot - 1);
quickSort(nums, pivot + 1, right);
}
private int findPivotAndReorder(int[] nums, int left, int right) {
int pivotIndex = left + (int)(Math.random() * (right - left + 1));
int pivot = nums[pivotIndex];
swap(nums, pivotIndex, right);
int l = left, r = right - 1;
while (l <= r) {
if (nums[l] <= pivot) {
l++;
} else if (nums[r] >= pivot) {
r--;
} else {
swap(nums, l++, r--);
}
}
swap(nums, l, right);
return l;
}
private void swap(int[] nums, int i, int j) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
顺便复习复习 选择排序
public static void selectSort(int[] arrs) {
long startTime = System.nanoTime();//获取开始时间
//判断数组是否为空 或者只有一个元素
if(arrs.length <2 | arrs == null) {
return ;
}
//循环数组 比较大小 这里i< length-1 下面的j才不会发生数组越界 而且外层循环只需遍历length-1次即可
for(int i = 0; i <arrs.length-1; i ++) {
int minIndex = i;
for(int j = i+1; j < arrs.length; j++) {
minIndex = arrs[j] < arrs[minIndex] ? j : minIndex;
}
if(i != minIndex) {
swap(arrs,i,minIndex);
}
}
long endTime = System.nanoTime();//获取结束时间
System.out.println("程序共运行了 "+(endTime-startTime) +"纳秒");
}
public static void swap(int[] arrs,int i ,int minIndex) {
int temp = arrs[i];
arrs[i] = arrs[minIndex];
arrs[minIndex] = temp;
}
第15行代码执行前 先进行判断 对于数据量小的数组 执行时间有明显的提升