int minIndex;for(int i =0; i < arr.length -1; i++){
minIndex = i;for(int j = i +1; j < arr.length; j++){if(arr[j]< arr[minIndex])minIndex = j;}swap(arr, i, minIndex);}
3.堆排序
主要思路:首先构建堆,然将对顶元素换到数组末尾,再堆交换后的堆进行调整。
代码易错点:
publicstaticvoidbuildMaxHeap(int[] arr){//从最后一个非叶子节点开始调整:i = arr.length / 2 - 1//从根节点也要调整,即i >= 0for(int i = arr.length /2-1; i >=0; i--){maxHeapfy(arr, i, arr.length);}}
//调整函数publicstaticvoidmaxHeapfy(int[] arr,int i,int heapSize){int largest = i;//左孩子节点为2 * i + 1,别忘记加1int l =2* i +1;int r = l +1;//左右孩子节点都要小于待排序的元素最大下标,heapsize是待排序的元素个数if(l < heapSize && arr[l]> arr[largest])largest = l;if(r < heapSize && arr[r]> arr[largest])largest = r;//如果largest不是根节点,才交换和调整if(largest != i){swap(arr, i, largest);maxHeapfy(arr, largest, heapSize);}}