以下排序算法是我自己跟着算法描述(参考别人)写的,直接粘贴到VS里就可以用了,想要理解,还是需要了解各种排序算法的实现原理。
# include & ltiostream & gt
# include & lt算法& gt
使用命名空间std
int acout & lt& ltc[I]& lt;& lt" ";= { 0 };
void show_Result(int *c)
{
for(int I = 0;我& lt10;++i)
{
[10]
}
cout & lt& ltendl
}
void show_Result2(int *c)
{
for(int I = 1;我& lt11;++i)
{
cout & lt& ltc[I]& lt;& lt" ";
}
cout & lt& ltendl
}
/*冒泡排序*/
void maopao(int *a)
{
int temp = 0;
for(int I = 0;我& lt10;i++)
{
for(int j = 0;j & lt10-1-I;j++)
{
if(a[j]& gt;a[j+1])
{
temp = a[j+1];
a[j+1]= a[j];
a[j]= temp;
}
}
}
}
/*/快速排序*/
void Quick_Sort(int first,int last)
{
int base = a[first];
int left = first
int right = last
int temp = 0;
if(left & gt;右)
{
返回;
}
而(左!=右)
{
while(left & lt;右)
{
if(a[right]& lt;基地)
{
打破;
}
-对;
}
while(left & lt;右)
{
if(a[left]& gt;基地)
{
打破;
}
++向左;
}
如果(左!=右)
{
temp = a[left];
a[左]= a[右];
a[right]= temp;
}
}
if (left == right)
{
a[第一]= a[左];
a[左] =基数;
}
//show _ Result(b);
//cout & lt;& ltendl
Quick_Sort(first,left-1);
Quick_Sort(left + 1,last);
}
/*/桶排序*/
void tong_Sort(int *a)
{
int b[10]= { 0 };
for(int I = 0;我& lt10;i++)
{
b[a[I]]++;
}
for(int I = 0;我& lt10;i++)
{
for(int j = b[I];j & gt0;j -)
{
cout & lt& lt我& lt& lt" ";
}
}
cout & lt& ltendl
}
/*/堆叠排序*/
#pragma区域MyRegion
int n = 10//元素的数量
int b[11]= { 0 };
//数据向下调整
void Sift_Down(int i)
{
int temp = 0;//交换值时使用
int flag = 0;//结束向下调整
while(2 * I & lt;= n & amp& ampflag == 0)
{
int last _ sift = I;
if(b[I]& gt;B[2 * i])//与左侧节点比较
{
last _ sift = 2 * I;//记录较小值的节点
}
if(2 * I+1 & lt;= n & amp& ampb[last _ sift]& gt;B[2 * i+1])//和右节点
{
last _ sift = 2 * I+1;//记录较小值的节点
}
如果(last_sift!= i)
{
temp = b[I];
b[I]= b[last _ sift];
b[last _ sift]= temp;
i = last _ sift//如果最小的节点是根节点,则结束数据降级。
}
其他
{
flag = 1;
}
}
}
//数据去堆,把最后一个节点的数据放在最上面。
int deleteMax()
{
int temp = 0;
temp = b[1];
b[1]= b[n];
n-;
sift _ Down(1);
返回温度;
}
void heap_Sort()
{
//建立最小堆
for(int I = n/2;我& gt0;-我)
{
Sift_Down(一);
}
int num = n;
//数据卸堆
for(int I = 1;我& lt= numi++)
{
cout & lt& ltdelete max()& lt;& lt" ";
}
}
#杂注endregion
/*合并排序*/
Void Guibin Garry (int a [],int first,int mid,int last,int temp[])//按顺序组合两个有序序列。
{
int i = first
int j = mid+1;
int n = mid
int m = last
int k = 0;
while(我& lt= n & amp& ampj & lt= m)
{
if(a[I]& lt;a[j])
{
temp[k++]= a[i++];
}
其他
{
temp[k++]= a[j++];
}
}
while(我& lt= n)
{
temp[k++]= a[i++];
}
while(j & lt;= m)
{
temp[k++]= a[j++];
}
for(I = 0;我& ltk;i++)
{
a[first+I]= temp[I];
}
}
Void guiding sort (int a [],int first,int last,int temp[])//先拆分序列。
{
if(first & lt;最后)
{
int mid =(first+last)/2;
guibingSort(a,first,mid,temp);
guibingSort(a,mid + 1,last,temp);
guibingarry(a,first,mid,last,temp);
}
}
void Gui_bingSort(int a[],int n)
{
int * p = new int[n];
guibingSort(a,0,n-1,p);
删除[]p;
}
/*直接插入排序*/
void目录_插入_排序(int qa[],int number)
{
int I = 0;
int j = 0;
int min _ set = 0;
int temp = 0;
for(I = 0;我& lt号码;i++)
{
min _ set = I;//如果扫描不出来,就不要换位置。
for(j = 0;j & lt我;++)//从头开始扫描,比较后记录位置。
{
if(QA[I]& lt;= qa[j])
{
min _ set = j;
temp = QA[I];
打破;
}
}
for(j = I;j & gtmin _ setj -)
{
QA[j]= QA[j-1];
}
if(min_set!=i)
QA[min _ set]= temp;
}
}
/*希尔排序*/
void shell_sort(int a[],int n)
{
int add = 5;//设置步长
int number = n/add;//一次可以排序的数字
while(添加)
{
number = n/add;
for(int j = 0;j & lt添加;j++)
{
int * p = new int[number];
//cout & lt;& lt号码& lt& ltendl
for(int I = 0;我& lt号码;i++)
{
p[I]= a[I * add+j];
}
dir_insert_sort(p,number);
for(int I = 0;我& lt号码;i++)
{
a[I * add+j]= p[I];
}
删除[]p;
}
if (add == 1)
{
打破;
}
add = add-2;
如果(添加& lt1)
{
add = 1;
}
}
}
int()//要排序的数据生成和输出显示
{
for(int I = 0;我& lt10;++i)
{
a[I]= I;
}
for(int I = 1;我& lt11;++i)
{
b[I]= I;
}
cout & lt& lt“猫炮”:& lt& ltendl//冒泡排序
random_shuffle(a,a+9);
show _ Result(a);
猫炮(一);
show _ Result(a);
cout & lt& lt"快速排序:" & lt& ltendl//快速排序
random_shuffle(a,a+9);
show _ Result(a);
Quick_Sort(0,9);
show _ Result(a);
cout & lt& lt" heap _ sort:" & lt;& ltendl//堆排序
random_shuffle(b+1,b+10);
show _ result 2(b);
heap_Sort()。
cout & lt& ltendl
cout & lt& lt" tong _ Sort:" & lt;& ltendl//桶排序
random_shuffle(a,a+9);
show _ Result(a);
tong _ Sort(a);
//show _ Result(a);
cout & lt& lt" guibing _ Sort:" & lt;& ltendl//合并排序
random_shuffle(a,a+9);
show _ Result(a);
Gui_bingSort(a,10);
show _ Result(a);
cout & lt& lt" dir _ insert _ sort:" & lt;& ltendl//直接插入排序
random_shuffle(a,a+9);
show _ Result(a);
dir_insert_sort(a,10);
show _ Result(a);
cout & lt& lt" shell _ sort:" & lt;& ltendl//希尔排序
random_shuffle(a,a+9);
show _ Result(a);
shell_sort(a,10);
show _ Result(a);
系统(“暂停”);
返回0;
}
结果: