leetcode 101 chapter 5 排序算法
/*** 采用前包后不包的策略**/void quick_sort(int[] nums,int left, int right){//说明索引范围少于等于1个if(left >= right-1) return;//两个指针指向开头与结尾,取第一个作为基准值int first = left,last = right-1,key = nums[first];while(first < last){while(first < last && nums[last] >= key) last--;nums[first] = nums[last];while(first < last && nums[first] <= key) first++;nums[last] = nums[first];}nums[first] = key;quick_sort(nums,left,first);quick_sort(nums,first+1,right);}
void merge_sort(int[] nums, int left, int right, int[] temp){if (left >= right - 1) return;//只有少于等于1个元素,这里采取前闭后开int middle = left + (right - left) / 2;merge_sort(nums,left,middle,temp);merge_sort(nums,middle,right,temp);int p = left, q = middle, i = left;//p是左半区间起始位置,q是右半区间起始,i是temp的起始位置while (p < middle || q < right){//合并过程if (q >= right || (p < middle && nums[p] < nums[q])) temp[i++] = nums[p++];else temp[i++] = nums[q++];}//将合并结果赋值给nums数组for (i = left; i < right; i++) {nums[i] = temp[i];}}
void insertion_sort(int[] nums, int n) {for (int i = 0; i < n; ++i) {for (int j = i; j > 0 && nums[j] < nums[j-1]; --j) {swap(nums[j], nums[j-1]);}}}
桶排序
桶排序错采取的策略是创建n个桶,在桶里可以存放任意多个相同类型的数,本身不同的桶是排好序的,然后再对桶内进行排序,就可以将所有数进行排序。
桶排序的时间复杂度为O(n),空间复杂度为O(n);
