终于把数据结构课程设计搞定

来源:互联网 发布:手机镜头 知乎 编辑:程序博客网 时间:2024/04/30 07:18

终于把数据结构课程设计搞定了,也是第一次用MFC 做出了一个比较象样的咚咚,得到老师的充分肯定,心情不错!

赫赫!

贴上排序的类

template <class Elem, class Comp>
class SortClass
{
 public:
 ///**********插入排序**********/
 void inssort(Elem A[],int n)
 {
 for(int i=1;i<n;i++)//插入第i个数据
  for(int j=i;(j>0)&&(Comp::lt(A[j],A[j-1]));j--)
   swap(A,j,j-1);

 }
 ///**********冒泡排序**********/
 void bubsort(Elem A[], int n) { // 冒泡排序
   for (int i=0; i<n-1; i++)     // 起泡第i个记录
  for (int j=n-1; j>i; j--)
    if (Comp::lt(A[j], A[j-1]))
   swap(A, j, j-1);
 }
 ///**********选择排序**********/
 void selsort(Elem A[],int n)
 {
  int lowindex;
  for(int i=0;i<n-1;i++)//select the ith record
  {
   lowindex=i;
   for(int j=n-1;j>i;j--)
    if(Comp::lt(A[j],A[lowindex]))
     lowindex=j;
     if(lowindex!=i)
   swap(A,i,lowindex);
  }

 }
 ///**********希尔排序**********/
 void inssort2(Elem A[],int n,int incr)
 {
  for(int i=incr;i<n;i+=incr)
   for(int j=i;(j>=incr)&&(Comp::lt(A[j],A[j-incr]));j-=incr)
    swap(A,j,j-incr);

 }

 void shellsort(Elem A[],int n)
 {
  for(int i=n/2;i>=1;i/=2)//每个增量
   for(int j=0;j<i;j++)//每个分组冒泡
    inssort2(&A[j],n-j,i);
  
 }
 ///**********快速排序**********/
 int partition(Elem A[],int i,int j,Elem &pivot)
 {
  i--;
  do
  {
   while((i<j)&&Comp::lt(A[++i],pivot));
   while((j>i)&&Comp::gt(A[--j],pivot));
   swap(A,i,j);
  }while(i<j);
  return i;
 }
 void qsort(Elem A[],int i,int j)
 {
 if(j<=i) return;//递规结束
 int pivotindex=(i+j)/2;
 swap(A,pivotindex,j);//put pivot at end
 int k=partition(A,i,j,A[j]);
 swap(A,k,j);
 qsort(A,i,k-1);
 qsort(A,k+1,j);
 }
 ///**********归并排序**********/
 void mergesort(Elem A[],Elem temp[],int left,int right)
 {
  if(left==right)
   return;
  int mid=(left+right)/2;
  mergesort(A,temp,left,mid);
  mergesort(A,temp,mid+1,right);
  for(int i=left;i<=right;i++)
     temp[i]=A[i];
  int l=left,r=mid+1;
  for(int j=left;j<=right;j++)
  {
   if(l>mid)
    A[j]=temp[r++];
   else
   if(r>right)
    A[j]=temp[l++];
   else
   if(Comp::lt(temp[l],temp[r]))
    A[j]=temp[l++];
   else
    A[j]=temp[r++];
  }
   
 }
 ///**********堆 排 序**********/
 void heapsort(Elem A[], int n) {
 Elem mval;
 maxheap<Elem,Comp> H(A, n, n);
 for (int i=0; i<n; i++)      
    H.removemax(mval);
 }
 ///**********基数排序**********/
 void radix(Elem A[], Elem B[],
           int n, int k, int r, int cnt[]) {
 
   int j;
   for (int i=0, rtok=1; i<k; i++, rtok*=r) {
  for (j=0; j<r; j++) cnt[j] = 0;   


  for (j=0; j<n; j++) cnt[(A[j]/rtok)%r]++;


  for (j=1; j<r; j++) cnt[j] = cnt[j-1] + cnt[j];

  for (j=n-1; j>=0; j--) B[--cnt[(A[j]/rtok)%r]] = A[j];

  for (j=0; j<n; j++) A[j] = B[j];   
   }
 }
 ///**********end of sortclass**********/
};

 

 

原创粉丝点击