您的位置:首页 > 其它

6种排序算法:冒泡、鸡尾酒、选择、插入、归并、快速

2012-03-29 13:09 441 查看
#include <iostream>
using namespace std;
void BubbleSort(int* pData,int Count)//冒泡排序
{
int iTemp,i,j;
for (i = 1;i < Count;i++)
{
for (j = Count - 1;j >= i;j--)
{
if (pData[j] < pData[j-1])
{
iTemp = pData[j-1];
pData[j-1]=pData[j];
pData[j]=iTemp;
}
}
}
}
void main()
{
int i,data[] = {10,9,8,7,6,5,4};
BubbleSort(data,7);
for (i = 0;i<7;i++)
{
cout<<data[i]<<" ";
}
cout<<"\n";
}


#include <iostream>
using namespace std;
void Cocktail(int* arr, int size)//鸡尾酒排序
{
int i,j,temp,tail = size - 1;
for (i = 0;i<tail;)
{
for (j = tail;j > i;j--)
{
if(arr[j] < arr[j-1])
{
temp = arr[j];
arr[j] = arr[j-1];
arr[j-1] = temp;
}
}
i++;
for (j = i;j < tail;j++)
{
if (arr[j] > arr[j+1])
{
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
tail--;
}
}
void main()
{
int i,arr[] = {1,3,5,7,6,56,76,122,3};
Cocktail(arr,sizeof(arr)/sizeof(int));
for (i = 0;i<9;i++)
{
cout<<arr[i]<<" ";
}
cout<<"\n";
}


#include <iostream>
using namespace std;
void SelectSort(int* pData,int Count)//选择排序
{
int i,j,iTemp,iPos;
for (i = 0;i<Count-1;i++)
{
iTemp =pData[i];
iPos = i;
for(j=i+1;j<Count;j++)
{
if (pData[j]<iTemp)
{
iTemp = pData[j];
iPos = j;
}
}
pData[iPos] = pData[i];
pData[i] = iTemp;
}
}
void main()
{
int i,data[] = {10,9,8,7,6,5,4};
SelectSort(data,7);
for (i=0;i<7;i++)
{
cout<<data[i]<<" ";
}
cout<<endl;
}


#include <iostream>
using namespace std;
void InsertSort(int* pData,int Count)//插入排序
{
int i,iPos,iTemp;
for (i=1;i<Count;i++)
{
iTemp = pData[i];
iPos = i-1;
while ((iPos>=0)&&(iTemp<pData[iPos]))
{
pData[iPos+1] =pData[iPos];
iPos--;
}
pData[iPos+1] = iTemp;
}
}
void main()
{
int i,data[] = {10,9,8,7,6,5,4};
InsertSort(data,7);
for (i=0;i<7;i++)
{
cout<<data[i]<<" ";
}
cout<<"\n";
}


#include <iostream>
using namespace std;
void merge(int *pData,int p,int q,int r)//归并排序
{
int i,k;
int begin1,end1,begin2,end2;
int *temp=new int[r-p+1];
begin1=p;
end1=q;
begin2=q+1;
end2=r;
k=0;
while(begin1<=end1 && begin2<=end2)
{
if (pData[begin1]<pData[begin2])
{
temp[k++]=pData[begin1++];
}
else
{
temp[k++]=pData[begin2++];
}
}
while(begin1<=end1)
{
temp[k++]=pData[begin1++];
}
while (begin2<=end2)
{
temp[k++]=pData[begin2++];
}
for (i=0;i<(r-p+1);i++)
{
pData[p+i]=temp[i];
}
delete []temp;
}

void merge_sort(int *pData,int first,int last)
{
int mid=0;
if (first<last)
{
mid=(first+last)/2;
merge_sort(pData,first,mid);
merge_sort(pData,mid+1,last);
merge(pData,first,mid,last);
}
}
void main()
{
int i,array[] ={1,5,2,6,3,10,9,18};
merge_sort(array,0,7);
for (i=0;i<8;i++)
{
cout<<array[i]<<" ";
}
}


int Partition(int *pData,int low,int high)//快速排序
{
int i = low;
int j = high + 1;
int temp = pData[low];
while(true){
while(pData[++i]<temp&&i<high);
while(pData[--j]>temp);//循环跳出后,下标为j的数组值一定小于等于temp
if(i>=j)
break;
if(i<j){
int temp = pData[i];
pData[i] = pData[j];
pData[j] = temp;
}
}
pData[low] = pData[j];
pData[j] = temp;
return j;
}

void QuickSort(int *pData,int low,int high)
{
if(low<high)
{
int tx = Partition(pData,low,high);
QuickSort(pData,low,tx - 1);
QuickSort(pData,tx+1,high);
}
}

int main()
{
int i,pData[17]={23,32,41,55,86,7,37,100,5,9,3,4,1,8,2,6,10};
cout<<endl;
QuickSort(pData,0,16);
for(i = 0;i<17;++i)
cout<<pData[i]<<' ';
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐