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;
}
}