排序算法

1.快速排序


void SortByName(data mydata[],int left,int right)  //left,right is index
{
  if(left>=right)
    return;
  int first=left,last=right;
  data key;
  CopyData(key,mydata[first]);
  cout<<key.name<<endl;
  while(first<last)
    {
      while(first<last && strcmp(mydata[last].name,key.name)>=0)
	--last;
      CopyData(mydata[first],mydata[last]);
      while(first<last && strcmp(mydata[first].name,key.name)<=0)
	++first;
      CopyData(mydata[last],mydata[first]);
    }
  CopyData(mydata[first],key);
  SortByName(mydata,left,first-1);
  SortByName(mydata,first+1,right);
}

2.插入排序

void SortByAge(data mydata[],int size)
{
  data temp;
  for(int i=1;i<size;i++)
    {
      int pos=0;   //position to insert
      while(pos<i && mydata[i].age < mydata[pos].age)
	pos++;
      if(pos<i)
	{
	  int k=i;
	  CopyData(temp,mydata[i]);  //to be inserted
	  while(k>pos)
	    {
	      CopyData(mydata[k],mydata[k-1]);
	      k--;
	    }
	  CopyData(mydata[k],temp); 
	}
    }
}


3.选择排序

void SortByBalance(data mydata[],int size)
{
  for(int i=0;i<size-1;i++)
    {
      int index=i;
      for(int j=i+1;j<size;j++)   //find the index of maximum
	if(mydata[j].balance>mydata[index].balance)
	  index=j;

      if(index!=i)  //if the position changed,swap the data
	{
	  data temp;
	  CopyData(temp,mydata[i]);
	  CopyData(mydata[i],mydata[index]);
	  CopyData(mydata[index],temp);
	}
    }
}


4.冒泡排序

//sort by cost using the bubble sort
void SortByCost()
{
  for(int i=0;i<count;i++)
    {
      int flag=0;
      for(int j=count-1;j>i;j--)
	{
	  if(records[j].cost>records[j-1].cost)  //If a number greater than the previous one, then exchange
	    {
	      Stock temp=records[j-1];
	      records[j-1]=records[j];
	      records[j]=temp;
	      flag=1;
	    }
	}
      if(flag==0)
	break;
    }
}


4.堆排序

void StockHeap::sortRecords()
{
	for(int i=size/2-1;i>=0;i--)
		heapAdjust(stocks,i,size-1);

	for(int i=size-1;i>0;i--)
	{
		swap(stocks[0],stocks[i]);
		heapAdjust(stocks,0,i-1);
	}
}


void StockHeap::heapAdjust(Stock *arr, int s, int m)
{
	string temp=arr[s].getTag();
	int index;
	for(index=2*s+1;index<=m;index=index*2+1)
	{
		if(index<m && arr[index].getTag()<arr[index+1].getTag())
			++index;
		if(temp>=arr[index].getTag())
			break;
		arr[s].tag=arr[index].getTag();
		s=index;
		arr[s].tag=temp;
	}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值