问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

以下排序的算法 快速排序 冒泡排序 直接插入排序 堆排序

发布网友 发布时间:2022-04-26 18:31

我来回答

2个回答

热心网友 时间:2022-05-18 19:45

================================================
功能:快速排序
输入:数组名称(也就是数组首地址)、数组中起止元素的下标
================================================

void quick_sort(int *x, int low, int high)
{
int i, j, t;
if (low < high) /*要排序的元素起止下标,保证小的放在左边,大的放在右边。这里以下标为low的元素为基准点*/
{
i = low;
j = high;
t = *(x+low); /*暂存基准点的数*/
while (i<j) /*循环扫描*/
{
while (i<j && *(x+j)>t) /*在右边的只要比基准点大仍放在右边*/
{
j--; /*前移一个位置*/
}
if (i<j)
{
*(x+i) = *(x+j); /*上面的循环退出:即出现比基准点小的数,替换基准点的数*/
i++; /*后移一个位置,并以此为基准点*/
}
while (i<j && *(x+i)<=t) /*在左边的只要小于等于基准点仍放在左边*/
{
i++; /*后移一个位置*/
}
if (i<j)
{
*(x+j) = *(x+i); /*上面的循环退出:即出现比基准点大的数,放到右边*/
j--; /*前移一个位置*/
}
}
*(x+i) = t; /*一遍扫描完后,放到适当位置*/
quick_sort(x,low,i-1); /*对基准点左边的数再执行快速排序*/
quick_sort(x,i+1,high); /*对基准点右边的数再执行快速排序*/
}
}

================================================
功能:冒泡排序
输入:数组名称(也就是数组首地址)、数组中元素个数
================================================

void bubble_sort(int *x, int n)
{
int j, k, h, t;
for (h=n-1; h>0; h=k) /*循环到没有比较范围*/
{
for (j=0, k=0; j<h; j++) /*每次预置k=0,循环扫描后更新k*/
{
if (*(x+j) > *(x+j+1)) /*大的放在后面,小的放到前面*/
{
t = *(x+j);
*(x+j) = *(x+j+1);
*(x+j+1) = t; /*完成交换*/
k = j; /*保存最后下沉的位置。这样k后面的都是排序排好了的。*/
}
}
}
}

================================================
功能:直接插入排序
输入:数组名称(也就是数组首地址)、数组中元素个数
================================================

void insert_sort(int *x, int n)
{
int i, j, t;
for (i=1; i<n; i++) /*要选择的次数:1~n-1共n-1次*/
{
/*
暂存下标为i的数。注意:下标从1开始,原因就是开始时
第一个数即下标为0的数,前面没有任何数,单单一个,认为
它是排好顺序的。
*/
t=*(x+i);
for (j=i-1; j>=0 && t<*(x+j); j--) /*注意:j=i-1,j--,这里就是下标为i的数,在它前面有序列中找插入位置。*/
{
*(x+j+1) = *(x+j); /*如果满足条件就往后挪。最坏的情况就是t比下标为0的数都小,它要放在最前面,j==-1,退出循环*/
}
*(x+j+1) = t; /*找到下标为i的数的放置位置*/
}
}

================================================
功能:堆排序
输入:数组名称(也就是数组首地址)、数组中元素个数
================================================
*/
/*
功能:渗透建堆
输入:数组名称(也就是数组首地址)、参与建堆元素的个数、从第几个元素开始
*/
void sift(int *x, int n, int s)
{
int t, k, j;
t = *(x+s); /*暂存开始元素*/
k = s; /*开始元素下标*/
j = 2*k + 1; /*右子树元素下标*/
while (j<n)
{
if (j<n-1 && *(x+j) < *(x+j+1))/*判断是否满足堆的条件:满足就继续下一轮比较,否则调整。*/
{
j++;
}
if (t<*(x+j)) /*调整*/
{
*(x+k) = *(x+j);
k = j; /*调整后,开始元素也随之调整*/
j = 2*k + 1;
}
else /*没有需要调整了,已经是个堆了,退出循环。*/
{
break;
}
}
*(x+k) = t; /*开始元素放到它正确位置*/
}

/*
功能:堆排序
输入:数组名称(也就是数组首地址)、数组中元素个数
*/
void heap_sort(int *x, int n)
{
int i, k, t;
//int *p;
for (i=n/2-1; i>=0; i--)
{
sift(x,n,i); /*初始建堆*/
}
for (k=n-1; k>=1; k--)
{
t = *(x+0); /*堆顶放到最后*/
*(x+0) = *(x+k);
*(x+k) = t;
sift(x,k,0); /*剩下的数再建堆*/
}
}
/*构造随机输出函数类*/
void input(int a[]){
int i;
srand( (unsigned int)time(NULL) );
for (i = 0; i < 4; i++)
{
a[i] = rand() % 100;
}
printf("\n");
}
/*构造键盘输入函数类*/
/*void input(int *p)
{
int i;
printf("请输入 %d 个数据 :\n",MAX);
for (i=0; i<MAX; i++)
{
scanf("%d",p++);
}
printf("\n");
}*/
/*构造输出函数类*/
void output(int *p)
{
int i;
for ( i=0; i<MAX; i++)
{
printf("%d ",*p++);
}
}

热心网友 时间:2022-05-18 21:03

你想要什么语言追问算法通用公式

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
脚崴了挂什么科、急急急 linux 解压缩工具--tar命令 生日祝福语闺蜜 简短独特暖心 QQ有哪些隐藏的图标??他们分别是什么??怎么样点亮?? QQ业务的各种图标怎么点亮? qq怎么点亮图标和名字 诗中书万象=求下联 大爱如山藏万象下联 中国电子展:电位器和可调电阻的区别是什么?这四点很明显 电位器的接线方法是什么 电位器的工作原理如何 考上MBA后能学到什么? 在排序算法中,是快速排序好还是冒泡排序好?? 全日制MBA毕业后可以做什么 数组排序,冒泡、插入、选择、快速以及堆排序。写出每个排序的过程。 MBA考过了能从事什么专业啊? 分别采用冒泡排序和堆序方法对关键字进行排序。并写出排序过程。考试!!!在线等!! 学mba能干什么 冒泡排序,堆排序,快速排序,插入排序,归并排序的的稳定性及时间空间复... ...可是我没有明白考取了MBA之后有什么好处呢? 初始状态按键值递增,分别用堆排序,快速排序和冒泡排序对其进行排序(按递增顺序)最省最费时排序?原因 考了mba以后可以做什么? 选择排序,快速排序,冒泡排序,堆排序,插入排序,基排序的程序的运行速度... MBA毕业后能干什么工作 排序法和冒泡法有什么区别? mba考过了有什么用 冒泡排序法是什么 c程序中冒泡法排序,选择法排序,快速排序的比较,哪个有优势,区别在哪里... 考MBA有什么用? 堆排序,希尔排序,冒泡排序,快速排序,哪个最费时 考了mba可以换什么工作吗 考MBA有什么发展前途吗?就业方向是哪? C语言 谢谢。 排序问题:随机产生1—M之间的N个整数,分别采用插入排序、选择排序、冒泡排序和堆 考了MBA有什么用 使用冒泡排序法,快速排序法,堆排序法设计一个排序程序,并采用菜单管理 考上MBA可以干什么工作,今年考上了MBA,现在处于失业状态,9月要上课了? 考了MBA对我的工作有什么好处啊? 考过了MBA适合去什么样的公司呢? 应该要一个什么职位呢? 戴尔电脑45瓦和65瓦的适配器能不能共用 谁能帮我把 活着 流血流泪自己上 再苦再累自己扛 做到这张图片上,好看一点 有苦自己咽 有事自己扛的句子 再苦再累自己扛的说说 自己的生活就要靠自己,别人给的始终是别人的。,再苦再累,都要自己扛。是什么意思? 有苦自己扛有泪自己擦的说说 再苦再累自己扛的句子 女人累了自己扛的句子 为什么男人常说流血流汗不流泪,再苦再累也要自己扛? 多流汗水莫流泪,遇到困难莫忧伤。风里雨里莫言苦,再苦再累自己扛。 “在苦在累自己扛”是哪首歌的歌词,关于在外打工。 累了自己抗,苦了自己忍,靠自己得到幸福的一切的星座有哪些? 不舒服自己扛的句子