给你一个整数数组 nums,请你将该数组升序排列。
Given an array of integers nums, sort the array in ascending order.
思路
依次使用十大经典排序。
解法1-冒泡
时间复杂度:O(n^2)
class Solution {
public int[] sortArray(int[] nums) {
int len = nums.length;
int index = 0;
int end = len -1;
for(int i = 0 ; i < len ; i++){
boolean isSort = true;
for(int j = 0; j < end; j++){
if(nums[j] > nums[j+1]){ // error: nums[i] > nums[j]
int tmp = nums[j];
nums[j] = nums[j+1];
nums[j+1] = tmp;
isSort = false;
index = j;
}
}
if(isSort){
break;
}
end = index;
}
return nums;
}
}
解法2-选择
时间复杂度:O(n^2)
class Solution {
public int[] sortArray(int[] nums) {
int len = nums.length;
for(int i = 0; i < len; i++){
int index = i;
for(int j = i; j < len; j++){
if(nums[j] < nums[index]){
index = j;
}
}
int tmp = nums[i];
nums[i] = nums[index];
nums[index] = tmp;
}
return nums;
}
}
解法3-插入
时间复杂度:O(n^2)
class Solution {
public int[] sortArray(int[] nums) {
int len = nums.length;
for(int i = 1; i < len; i++){
int tmp = nums[i];
int j = 0;
for(j = i-1; j >=0 ; j--){
if(nums[j] > tmp){
nums[j+1] = nums[j];
}else{
break;
}
}
nums[j+1] = tmp;
}
return nums;
}
}
解法4-希尔
时间复杂度:O(nlogn)
class Solution {
public int[] sortArray(int[] nums) {
int len = nums.length;
for(int gap = len/2; gap > 0; gap /=2){
for(int i = gap; i < len; i++){
shell(nums, i, gap);
}
}
return nums;
}
private void shell(int[] nums, int i, int gap){
int tmp = nums[i];
int j = 0;
for(j = i - gap; j >=0; j-= gap){
if(nums[j] > tmp){
nums[j+gap] = nums[j];
}else{
break;
}
}
nums[j+gap] = tmp;
}
}
解法5-归并 !
时间复杂度:O(nlogn)
解法6-快排 !
时间复杂度:O(nlogn)
class Solution {
public int[] sortArray(int[] nums) {
int len = nums.length;
sort(nums, 0, len-1);
return nums;
}
private void sort(int[] arr, int left, int right){
if(left < right){ // error: while(left < right){}
int mid = quickSort(arr, left, right);
sort(arr, left, mid-1);
sort(arr, mid+1, right);
}
}
private int quickSort(int[] arr, int left, int right){
int tmp = arr[left];
int i = left;
int j = right;
while(true){
while(i<=j && arr[i] <= tmp){
i++;
}
while(i<=j && arr[j] >= tmp){
j--;
}
if(i >= j){
break;
}
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
arr[left] = arr[j];
arr[j] = tmp;
return j;
}
}
解法7-堆排
时间复杂度:O(nlogn)
解法8-计数
解法9-桶排序
解法10-基数