• 大小: 11KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-05-08
  • 语言: C/C++
  • 标签: 排序  

资源简介

随机生成10000个数,对同一组数可分别用八种排序方式排序。并分别计算时间。八种排序为:插入、冒泡、归并、选择、堆、快速、希尔、基数排序。

资源截图

代码片段和文件信息

#include 
//#include 
#include “time.h“
#include “math.h“
#include “stdio.h“

using namespace std;

#define max_size 10
#define N 10000
#define max N

int other[N];

void swap(int &aint &b)
{
int temp;
temp=a;
a=b;
b=temp;
}

//插入排序
int insert_sort(int A[N+1])

clock_t startend;

start=clock();
    for(int i=2;i<=N;i++)
   if(A[i]    {
A[0]=A[i];
for(int j=i-1;A[0]<=A[j];j--)
A[j+1]=A[j];
A[j+1]=A[0];
   }

/* for(int i=2;i<=N+1;i++)
{
A[0]=A[i];
for(int j=1;j {
//改进
            if(A[0]<=A[j])
{
A[j+1]=A[j];
}
else
{
A[j+1]=A[0];
//break;
}
                
if(A[0]<=A[j])
{
for(int k=i;k>j;k--)
A[k]=A[k-1];
break;
}
}
A[j]=A[0];

}*/
end=clock();

cout< for(i=1;i<=N;i++)
printf(“%5d“A[i]);
//cout<    //cout< cout< return 0;
}


//冒泡排序
bubble_sort(int A[N+1])
{
clock_t startend;
//A[0]为哨兵
start=clock();
for(int i=1;i for(int j=N;j>=i;j--)
{
if(A[j] {
A[0]=A[j-1];
A[j-1]=A[j];
                A[j]=A[0];
}
}
end=clock();

    cout< for(i=1;i<=N;i++)
printf(“%5d“A[i]);
    cout< return 0;
}


//快速排序
partition(int *Aint iint j)
{
int privot=A[i];
while(i {
while(A[j]>=privot&&i j--;
A[i]=A[j];

while(privot>=A[i]&&i i++;
A[j]=A[i];
}
A[i]=privot;
return i;
}

void quick_sort(int *Aint lowint high)
{
    int pos;
//clock_t startend;
//start=clock();
if(low {
        pos=partition(Alowhigh);
     quick_sort(Alowpos-1);
     quick_sort(Apos+1high); 
}
//end=clock();

//cout< //for(int i=1;i<=N;i++)
// cout<    //cout<// return 0;
}


//归并排序
/*void merge(int A[N+1]int *qint iint mint n)
{
int jk;
for(j=m+1k=i;i<=m&&j<=n;k++)
{
if(A[i]<=A[j])
q[k]=A[i++];
else
q[k]=A[j++];
}

while(i<=m)
    q[k++]=A[i++];
while(j<=n)
q[k++]=A[j++];
}

void m_sort(int A[N+1]int *pint sint t)
{
int mT[N];
if(s==t)
p[s]=A[s];
else
{
m=(s+t)/2;
m_sort(ATsm);
        m_sort(ATm+1t);
merge(Tpsmt);
}
}
*/
void Merge_Sort(int *p int b int e)
{
    if(e-b+1 > 2) //当数组元素个数大于2时需要继续向下划分(递归)
    {
        Merge_Sort(p b (e+b)/2);
        Merge_Sort(p (e+b)/2+1 e);

        //合并已排序好的两部分(b(e+b)/2) 和 ((e+b)/2+1e)
        int i = b j = (e+b)/2+1 k=b;
        while(i<=(b+e)/2 && j<=e)
        {//比较两个下标i和j所代表的元素

评论

共有 条评论