1楼:思维超哥
希尔排序,简单选择排序,堆排序,快速排序是不稳定的
我是记住的,具体为什么,不知道……
2楼:虚无メ飘渺
希尔排序,快速排序和堆排序是不稳定的。一般来说,排序过程中比较是在相邻的两个记录关键字间进行的排序方法是稳定的。而上述三种方法则不是如此交换
3楼:匿名用户
快速排序不稳定,不过最为常用吧,我是搞acm的这个在比赛中最常用,我只用这个,基本上没能卡得住的。效率又高
冒泡排序、插入排序、希尔排序 快速排序 归并排序 堆排序 选择排序中,哪些算法是全局有序的?
4楼:匿名用户
全局有序还是稳定?稳定的意思是说,如果排序前a[i]=a[j],i=j,即排序后相对位置改变了。冒泡、插入、归并、堆排是稳定的,剩下几种都是不稳定的。
冒泡排序,堆排序,快速排序,插入排序,归并排序的的稳定性及时间空间复杂度
5楼:匿名用户
冒泡排序,插入排序,归并排序,基数排序是稳定的排序。快速排序,选择排序,堆排序,希尔排序是不稳定的排序。
冒泡排序,插入排序,选择排序的时间复杂度是o(n^2),归并排序,堆排序,快速排序的时间复杂度都是o(n*log(n)),空间复杂度冒泡排序,插入排序,选择排序都是o(1),归并排序为o(n)。
6楼:侠盗俏俏
快速排序堆排序不稳定,
利用插入排序,希尔排序,起泡排序,快速排序,选择排序,堆排序,归并排序排序方法排序30000个随机整数
7楼:智慧的默默
#include"stdio.h"
#include "stdlib.h"
#include
#include
#include"time.h"
#include
using namespace std;
void insertsort(int* pdataarray, int idatanum)
pdataarray[k] = temp; //插入
} }
} //交换data1和data2所指向的整形
void dataswap(int* data1, int* data2)
*函数名称:selectionsort
*参数说明:pdataarray 无序数组;
* idatanum为无序数据个数
*说明: 选择排序
void selectionsort(int* pdataarray, int idatanum)
}*函数名称:shellinsert
*参数说明:pdataarray 无序数组;
* d 增量大小
* idatanum为无序数据个数
*说明: 希尔按增量d的插入排序
void shellinsert(int* pdataarray, int d, int idatanum)
if (j != i - d) //存在比其小的数
pdataarray[j+d] = temp;
} }
*函数名称:shellsort
*参数说明:pdataarray 无序数组;
* idatanum为无序数据个数
*说明: 希尔排序
void shellsort(int* pdataarray, int idatanum)
}*函数名称:bubblesort
*参数说明:pdataarray 无序数组;
* idatanum为无序数据个数
*说明: 冒泡排序
void bubblesort(int* pdataarray, int idatanum)
int partions(int l,int low,int high)
if(rchild<=size&&a[rchild]>a[max])
if(max!=i)
}}void buildheap(int *a,int size) //建立堆
}void heapsort(int *a,int size) //堆排序
} void mergearray(int a, int first, int mid, int last, int temp)
while (i <= m)
temp[k++] = a[i++];
while (j <= n)
temp[k++] = a[j++];
for (i = 0; i < k; i++)
a[first + i] = temp[i];
} void mergesort(int a, int first, int last, int temp)
}bool mergesort(int a, int n)
int main(int argc, char* argv)
queryperformancefrequency(&freq);
queryperformancecounter(&start);
insertsort(aa,30000);
queryperformancecounter(&end);
double e=(double)(end.quadpart-start.quadpart)/ (double)freq.quadpart;
printf("插入排序%.10f seconds\n",e);
queryperformancefrequency(&freq);
queryperformancecounter(&start);
selectionsort(aa,30000);
queryperformancecounter(&end);
e=(double)(end.quadpart-start.quadpart)/ (double)freq.quadpart;
printf("选择排序%.10f seconds\n",e);
queryperformancefrequency(&freq);
queryperformancecounter(&start);
shellsort(aa,30000);
queryperformancecounter(&end);
e=(double)(end.quadpart-start.quadpart)/ (double)freq.quadpart;
printf("希尔排序%.10f seconds\n",e);
queryperformancefrequency(&freq);
queryperformancecounter(&start);
bubblesort(aa,30000);
queryperformancecounter(&end);
e=(double)(end.quadpart-start.quadpart)/ (double)freq.quadpart;
printf("起泡排序%.10f seconds\n",e);
queryperformancefrequency(&freq);
queryperformancecounter(&start);
quicksort(aa,30000);
queryperformancecounter(&end);
e=(double)(end.quadpart-start.quadpart)/ (double)freq.quadpart;
printf("快速排序%.10f seconds\n",e);
queryperformancefrequency(&freq);
queryperformancecounter(&start);
heapsort(aa,30000);
queryperformancecounter(&end);
e=(double)(end.quadpart-start.quadpart)/ (double)freq.quadpart;
printf("堆排序%.10f seconds\n",e);
queryperformancefrequency(&freq);
queryperformancecounter(&start);
mergesort(aa,30000);
queryperformancecounter(&end);
e=(double)(end.quadpart-start.quadpart)/ (double)freq.quadpart;
printf("归并排序%.10f seconds\n",e);
return 0;
} 我弄了很久才出来,请采纳吧!拜托了!
还有若是结果中停止程序,是因为你的数据太多太大,只要重新运行一遍就可以了!
数据结构:对直接插入排序、折半插入排序、希尔排序、冒泡排序、快速排序、简单选择排序、堆排序、归并排序
8楼:匿名用户
这个问题太大了,还要**,除非机器里有现成的,否则,你这个问法。。。。确实。。。。
比较直接插入排序,简单选择排序,快速排序,堆排序,归并排序,希尔排序和基数排序的时空性能稳定性和情
9楼:宝石鲨鱼
堆排序 n*logn 时间在这里比较优 不过稳定性差快排 o(nlogn),最坏情况为o(n^2)。在实际应用中,快速排序的平均时间复杂度为o(nlogn)。
比较均衡
直接插入排序,简单选择排序 n^2
希尔排序和基数排序 不太了解
空间的话 个人认为是一样的 因为你要用同样的数组去存 只是存的顺序不同罢了
时间的话 100w以内 快排 最优 100w以上 堆排的优越性就明显出来了
所以一般快排就可以满足
在快速排序、堆排序、归并排序中,什么排序是稳定的?
10楼:沉珂侧畔
归并排序是稳定的“快速排序和堆排序都不稳定.不稳定:就是大小相同的两个数,经过排序后,最终位置与初始位置交换了。
快速排序:
27 23 27 3
以第一个27作为pivot中心点,则27与后面那个3交换,形成
3 23 27 27,排序经过一次结束,但最后那个27在排序之初先于初始位置3那个27,所以不稳定。
堆排序:
比如:3 27 36 27,
如果堆顶3先输出,则,第三层的27(最后一个27)跑到堆顶,然后堆稳定,继续输出堆顶,是刚才那个27,这样说明后面的27先于第二个位置的27输出,不稳定。”
“2 归并排序(mergesort)
归并排序先分解要排序的序列,从1分成2,2分成4,依次分解,当分解到只有1个一组的时候,就可以排序这些分组,然后依次合并回原来的序列中,这样就可以排序所有数据。合并排序比堆排序稍微快一点,但是需要比堆排序多一倍的内存空间,因为它需要一个额外的数组。”
以ai与aj为例子
快速排序有两个方向,左边的i下标一直往右走,当a[i] <= a[center_index],其中center_index枢元素的数组下标,一般取为数组第0个元素。而右边的j下标一直往左走,当a[j] > a[center_indexij都走不动了,i <= j, 交换a[i]和a[j],重复上面的过程,直到i>j。
交换a[j]和a[center_index],完成一趟快速排序。在中枢元素和a[j]交换的时候,很有可能把前面的元素的稳定性打乱,比如序列5 3 3 4 3 8 9 10 11,现在中枢元素5和3(第5个元素,下标从1开始计)交换就会把元素3的稳定性打乱,所以快速排序是一个不稳定的排序算法,不稳定发生在中枢元素和a[j]交换的时刻。
“二分法插入排序快速排序归并排序”和“堆排序”的
1楼 carry 小小 二分法插入排序 复杂度 o nlogn 快速排序 o nlogn 有可能退化归并排序 o nlogn 比较快 堆排序 o nlogn 最稳定的 在快速排序 堆排序 归并排序中,什么排序是稳定的? 2楼 沉珂侧畔 归并排序是稳定的 快速排序和堆排序都不稳定 不稳定 就是大小相同...
什么时候用归并排序,什么时候用快速排序
1楼 匿名用户 内存空间不足的时候使用归并排序,能够使用并行计算的时候使用归并排序。 对时间复杂度o nlogn 依然不满意的情况下使用快速排序。 2楼 杭幻梅吉名 总体上是快排 详细的说 若数据比较无序,快排快。 若数据中部分有序,归并快。 建议你使用快排,因为就算归并快,也快不了多少。而快排能处...
短文排序!急!快点,这个短文排序
1楼 夜之忧伤 冬天到了,寒风把银白的雪花带到人间 柳树 杨树的叶子都枯黄了,飘落了。 牡丹 芍药也失去了它们那美丽的容颜。 在这万里雪飘 数九寒天的季节里,只有梅花独自开得那么盛,那么艳。 纷纷飞舞的雪花飘洒在它那耀眼的 绽开的花瓣上,它依然虎虎有生气。 还有些花瓣掩在白雪里,红白相映,色彩灿烂,...