classHeapSort{privatevoidswap(int[] nums,int index1,int index2){int tmp = nums[index1];
nums[index1]= nums[index2];
nums[index2]= tmp;}publicvoidbuildMaxHeap(int[] nums){int end = nums.length -1;for(int i = end /2; i >=0; i--){downToHeap(nums, i, end);}}// 对下标为i的节点,将其构造为i的最大堆publicvoiddownToHeap(int[] nums,int i,int end){while(i *2+1<= end){int left = i *2+1;int right = i *2+2;int max;if(left <= end && nums[left]> nums[i]){
max = left;}else{
max = i;}if(right <= end && nums[right]> nums[max]){
max = right;}if(max != i){swap(nums, max, i);
i = max;}else{break;}}}publicvoidheapSort(int[] nums){buildMaxHeap(nums);int end = nums.length -1;for(int i = end; i >=1; i--){swap(nums, i,0);
end--;downToHeap(nums,0, end);}}}
堆排序
classMergeSort{int[] tmp;publicint[]sortArray(int[] nums){
tmp =newint[nums.length];mergeSort(nums,0, nums.length -1);return nums;}privatevoidmergeSort(int[] nums,int left,int right){if(left >= right){return;}int mid =(left + right)/2;mergeSort(nums, left, mid);mergeSort(nums, mid +1, right);int index =0;int l = left;int r = mid +1;while(l <= mid && r <= right){if(nums[l]< nums[r]){
tmp[index++]= nums[l++];}else{
tmp[index++]= nums[r++];}}while(l <= mid){
tmp[index++]= nums[l++];}while(r <= right){
tmp[index++]= nums[r++];}for(int i =0; i < right - left +1; i++){
nums[i + left]= tmp[i];}}}
链表排序
快速排序
publicstaticListNodequickSort(ListNode begin,ListNode end){//判断为空,判断是不是只有一个节点if(begin ==null|| end ==null|| begin == end)return begin;//从第一个节点和第一个节点的后面一个几点//begin指向的是当前遍历到的最后一个<= nMidValue的节点ListNode first = begin;ListNode second = begin.next;int nMidValue = begin.val;//结束条件,second到最后了while(second != end.next && second !=null){//结束条件//一直往后寻找<=nMidValue的节点,然后与fir的后继节点交换if(second.val < nMidValue){
first = first.next;//判断一下,避免后面的数比第一个数小,不用换的局面if(first != second){int temp = first.val;
first.val = second.val;
second.val = temp;}}
second = second.next;}//判断,有些情况是不用换的,提升性能if(begin != first){int temp = begin.val;
begin.val = first.val;
first.val = temp;}//前部分递归quickSort(begin, first);//后部分递归quickSort(first.next, end);return begin;}