voidSelect_Sort(){for(int i =1; i <= N -2; i++){int min = i;for(int j = i; j < N; j++){if(A[j]< A[min]) min = j;}if(min!=i)swap(A[min], A[i]);//min的值发生了改变}}
voidDown_Adjust(int k,int n){int j = k;//A[j]是A[i]的父节点。for(int i = k *2; i <= n; i*=2){if(i +1<= n&&A[i]< A[i +1]) i++;if(A[j]>= A[i])break;else{swap(A[i], A[j]);
j = i;//保持j为i的父节点,因为下一轮i就要乘2了。}}}voidBuildHeap(){for(int i = N /2; i >=1; i--){Down_Adjust(i,N-1);}}voidHeapSort(){BuildHeap();travel();for(int i = N-1; i >1; i--){swap(A[1], A[i]);Down_Adjust(1, i-1);travel();}}