参考:
https://leetcode-cn.com/problems/sort-an-array/solution/shi-da-pai-xu-suan-fa-by-ai-wu-jin-xin-fei-xiang/
public class Solution {
public List<Integer> sortArray(int[] arr) {
List<Integer> l = new LinkedList<>();
int min = arr[0], max = arr[0];
// 找到最小最大值
for (int i = 1; i < arr.length; i++) {
if (arr[i] > max)
max = arr[i];
if (arr[i] < min)
min = arr[i];
}
// 填充0
int[] bucket = new int[max - min + 1];
Arrays.fill(bucket, 0);
// 填充数据
for (int anArr : arr) {
bucket[anArr - min]++;
}
int index = 0, i = 0;
while (index < arr.length) {
if (bucket[i] != 0) {
arr[index] = i + min;
bucket[i]--;
index++;
} else {
i++;
}
}
for (int num : arr) {
l.add(num);
}
return l;
}
}
class Solution:
def sortArray(self,nums):
# 第一层for表示循环插入的遍数
for i in range(1, len(nums)):
for j in range(i, 0, -1):
if nums[j] < nums[j - 1]:
nums[j], nums[j - 1] = nums[j - 1], nums[j]
else:
break
return nums
class Solution:
def sortArray(self,nums):
# 普通快速排序
def partition(arr, left, right):
# 基准位置,所有元素都和基准比较
pivot = left
# index位置为开始排序的位置
index = pivot + 1
# 从index位置循环到最后一个位置(由于right存储的是数组长度-1,所以这里要+1才能到数组长度)
for i in range(index, right + 1):
# 如果比基准要小,i与index位置的元素交换值
if arr[i] < arr[pivot]:
arr[i], arr[index] = arr[index], arr[i]
# 交换后,index位置上的值已经小于基准位置的值,所以移动到下一个位置,等待再次交换比基准更小的值
index += 1
# 交换完成,index位置上的值大于基准位置,所以将基准位置与index-1位置的值交换
# index-1的数值必定小于pivot位置数值,交换后,index-1为pivot数值,它之前的均为小于pivot数值的,之后的均为大于pivot数值的
# index-1位置即成为分界线
arr[pivot], arr[index - 1] = arr[index - 1], arr[pivot]
return index - 1
def q_sort(arr, left, right):
if left < right:
pivot = partition(arr, left, right)
q_sort(arr, left, pivot - 1)
q_sort(arr, pivot + 1, right)
return arr
return q_sort(nums, 0, len(nums) - 1)
if name == 'main':
x = Solution()
nums = [5,7,8,9,1,3,7]
print(x.sortArray(nums))