#include <bits/stdc++.h>
using namespace std;
//数据结构(考点):时空分析以及排序对应的优化等等知识点散但统一就那几个问题
//学习方法:仔细看课本,实在不行看B站视频动画模拟
//1简单直接排序
//2希尔排序
//3起泡排序
//4快速排序
//简单选择排序
//堆排序
//二路归并排序
//1依次将带排序序列的每个记录插入到已经排好的序列中知道全部序列都排好序
void insertsort(int r[],int n)
{
int i,j;
for(i=2;i<=n;i++)
{
r[0]=r[i];
for(j=i-1;j>0&&r[0]<r[j];j--)
{
r[j+1]=r[j];
}
r[j+1]=r[0];
}
}
//2希尔排序:先将整个待排序序列分割成若干子序列,在子序列中进行直接插入排列基本有序时再对整体进行直接插入排序
void shellsort(int r[],int n)
{
int d,i,j,temp;
for(d=n/2;d>=1;d=d/2)
{
for(i=d+1;i<=n;i++)
{
temp=r[i];
for(j=i-d;j>0&&temp<r[j];j=j-d)
r[j+d]=r[j];
r[j+d]=temp;
}
}
}
//3起泡排序:每一趟都将最大的移动到最后,这里有一个优化的地方就是记录bound
void bubblesort(int r[],int n)
{
int j,exchange,bound,temp;
exchange=n;
while(exchange!=1)//可以提前终止
{
bound=exchange;//赋值
exchange=1;//置0
for(j=1;j<=bound;j++)//起始位置不变,变的是终止bound
{
if(r[j]>r[j+1])
{
swap(r[j],r[j+1]);
exchange=j;//每次交换位置记录
}
}
}
}
//4快速排序:选择轴值,轴值左边小于等于轴值,则右边大于等于轴值
int sortpartition(int r[],int f,int l)
{
int i=f,j=l,t;
while(i<j)//左右只有指针碰头
{
while(i<j&&r[i]<=r[j]) j--;//首先左指针右移动
if(i<j){
swap(r[i],r[j]);
i++;//进行下一个位置的标记
}
while(i<j&&r[i]<=r[j]) i++;//右指针左移动
if(i<j){
swap(r[i],r[j]);
j--;
}
}
return i;//记录轴值的最终位置
}
void quicksort(int r[],int f,int l)
{
if(f>=l) return ;
else {
int p=sortpartition(r,f,l);
quicksort(r,f,p-1);//对左边进行快排
quicksort(r,p+1,l);//对右边进行快排
}
}
//一节课剩下的这些 就没有写
//简单选择排序:在无序区中选择最小的和有序区域最后一个元素交换
//堆排序:堆的初始化,堆调整
//归并的递归
//归并非递归
int n=6;
int main()
{
int r[7]={0,6,5,4,2,1,3};
//insertsort(r,n);
//shellsort(r,n);
//bubblesort(r,n);
//quicksort(r,1,n);
for(int i=1;i<=n;i++) cout<<r[i]<<" ";
cout<<endl;
return 0;
}
【数据结构】排序
于 2022-01-04 00:05:05 首次发布