排序过程
排序过程如下,很形象
代码思路
两层遍历
第一层含义:
每次排好一个位置,我们需要排多少次,第一次拍好最后一个,第二次拍好倒数第二个,以此类推,最后剩一个的时候不用排,所以应该需要拍 n-1 次
第二层含义:
就是普通的遍历,我们需要将较大值一直向右移动,但是由于最右面可能已经排好了,比如第一轮把最后一个数变成最大了,第二轮我们排到倒数第二个就可以了,所以这个范围是和第一层遍历的值有关的
Java代码
class Solution {
public int[] sortArray(int[] nums) {
int n = nums.length;
// 第一层:一次排好一个位置,需要多少次
for (int i = 0; i < n - 1; i++) {
// 第二层:进行遍历的同时进行交换,终点与第一层有关
for (int j = 0; j < n - 1 - i; j++) {
if (nums[j] > nums[j + 1]) {
swap(nums, j, j + 1);
}
}
}
return nums;
}
private void swap(int[] nums, int i, int j) {
int tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
}
}
python代码
class Solution:
def sortArray(self, nums: List[int]) -> List[int]:
n = len(nums)
for i in range( n - 1):
for j in range(n - 1 - i):
if nums[j] > nums[j + 1]:
nums[j], nums[j+1] = nums[j+1], nums[j]
return nums