七种排序算法实现(数据结构与算法)

//冒泡排序

void bubblesort(int *array,int length)

{

      for(int i=length;i>0;i--)

      {

           bool flag=true;

           for(int j=1;j<i;j++)

           {

                 if(array[j-1]>array[j])

                 {

                       int temp=array[j-1];

                      array[j-1]=array[j];

                      array[j]=temp;

                      flag=false;

                 }

           }

           if(flag)

           {

                 break;

           }

      }

}

 

void print(int *array,int length)

{

      for(int i=0;i<length;i++)

      {

           cout<<array[i]<<" ";

      }

      cout<<endl;

}

 

//选择排序

void chooseSort(int *array,int length)

{

      for(int i=length;i>0;i--)

      {

           int k=0;

           for(int j=1;j<i;j++)

           {

                 if(array[k]<array[j])

                      k=j;

           }

           if(k!=i-1)

           {

                 int temp=array[k];

                 array[k]=array[i-1];

                 array[i-1]=temp;

           }

      }

}

 

//插入排序

void inserSort(int *array,int length)

{

      int temp;

      for(int i=1;i<length;i++)

      {

           int j=i-1;

           temp=array[i];

           while(j>=0)

           {

                 if(temp<array[j])

                      j--;

                 else

                      break;

           }

           j++;

                 for(int k=i;k>j;k--)

                      array[k]=array[k-1];

                 array[j]=temp;

      }

}

//希尔排序

void shellSort(int *array,int length)

{

      int d=length;

      while(d>1)

      {

           d=d>>1;

           for(int i=0;i+d<length;i=i+1)

           {

                 int mark=i+d;

                 int temp=array[mark];

                 while((mark-d>=0)&&temp<array[mark-d])

                 {

                      array[mark]=array[mark-d];

                      mark-=d;

                 }

                 array[mark]=temp;

           }

           cout<<"d="<<d<<"  ";

           print(array,10);

      }

     

}

 

//快速排序

void quickSort(int *array,int start,int end)

{

      int i=start;

      int j=end;

      int temp=array[start];

      if(i>=j)

           return;

      while(i<j)

      {

           while(i<j&&array[j]>temp)

                 j--;

           array[i]=array[j];

           while(i<j&&array[i]<=temp)

                 i++;

           array[j]=array[i];

      }

      array[i]=temp;

      quickSort(array,start,i-1);

      quickSort(array,i+1,end);

}

//二路归并排序

void mergeSortByREC(int array[],int start,int end)

{

      if(start<end)

      {

           int dis=(end-start)/2;

           mergeSortByREC(array,start,start+dis);

           mergeSortByREC(array,start+dis+1,end);

           merge(array,start,start+dis,start+dis+1,end);

           print(array,5);

      }

}

void merge(int *array,int start1,int end1,int start2,int end2)

{

      cout<<"start1="<<start1<<"end1="<<end1<<"start2="<<start2<<"end2="<<end2<<"   ";

      int *temp=new int[end1-start1+end2-start2+2];

      int k=0;

      int i1=start1;

      int i2=start2;

      while(i1<=end1&&i2<=end2)

      {

           if(array[i1]<array[i2])

                 temp[k++]=array[i1++];

           else

                 temp[k++]=array[i2++];

      }

      while(i1<=end1)

           temp[k++]=array[i1++];

      while(i2<=end2)

           temp[k++]=array[i2++];

      for(int i=start1,mark=0;mark<k;i++)

           array[i]=temp[mark++];

}

//堆排序

void heapSort(int *array,int length)

{

      for(int i=length/2;i>=0;i--)

      {

           heapAdjust(array,i,length);

      }

 

      for(int i=length-1;i>0;i--)

      {

           swap(array[0],array[i]);

           heapAdjust(array,0,i);

      }

}

 

void heapAdjust(int *array,int i,int length)

{

      while(2*i+1<length)

      {

           int left=2*i+1;

           if((left+1)<length&&array[left]<array[left+1])

                 left++;

                 if(array[i]<array[left])

                 {

                      swap(array[i],array[left]);

                      i=left;

                 }

                 else

                      break;

      }

 

}

posted @ 2014-04-27 00:22  般若一号  阅读(416)  评论(0编辑  收藏  举报