选择类排序:选择排序和堆排序

来源:互联网 发布:ubuntu配置jdk 编辑:程序博客网 时间:2024/06/03 18:17

选择排序

void select_sort(int *arr,int size){  int tmp=0;  for(int i=0;i<size-1;i++)  {    for(int j=i+1;j<size;j++)    {        if(arr[j]<arr[i])        {          tmp=arr[j];          arr[j]=arr[i];          arr[i]=tmp;        }    }  }}

堆排序

void AdjustDown(int *arr,int size,int root){   int parent=root;   //左孩子   int child=root*2+1;   while(child<size){if(child+1<size&&arr[child+1]>arr[child])       child+=1;   if(arr[child]>arr[parent])   {       std::swap(arr[parent],arr[child]);       parent=child;       child=parent*2+1;   }   else       break;   }}void heap_sort(int *arr,int size){    //创建堆  for(int i=(size-2)>>1;i>=0;i--)  {    AdjustDown(arr,size,i);  }  //排序  for(int j=size-1;j>0;j--)  {    std::swap(arr[0],arr[j]);    AdjustDown(arr,j,0);  }}