堆排序
#include "stdafx.h" void temp(int *l,int i,int j){ l[i]=l[i]^l[j]; l[j]=l[i]^l[j]; l[i]=l[i]^l[j]; }//使用异或有个问题,当i和j相等时,不能实现交换的目的 void HeapSort_M(int *l,int s,int m){ int temp=l[s]; for(int j=2*s;j<m;j*=2) { if(j<m&&l[j]<l[j+1]){ ++j; } if(temp>l[j]) break; l[s]=l[j]; s=j; } l[s]=temp; } void heapSort(int *l,int length){ for (int i = length/2; i >0; i--) { HeapSort_M(l,i,length); } for(int j=length;j>0;j--){ temp(l,1,j); HeapSort_M(l,1,j-1); } } int _tmain(int argc, _TCHAR* argv[]) { int a[10]={0,50,10,90,30,70,40,80,60,20}; heapSort(a,9); for(int i=1;i<10;i++) printf("%d--",a[i]); return 0; }