‘壹’ 大量数据用哪种算法排序最好
七种排序算法:冒泡、选择、插入、快速、Bucket、Shell、Heap
其中冒泡是最简单、也是效率最低的一种排序方法,老师要求我们掌握的是选择排序法。
快速排序法可以说是最好的排序算法:首先选一个分界值,把大于分界值和小于分界值的数据分成两部分;对于分开的部分,不断重复这个过程,直到结束。
‘贰’ 一组整数排序的算法。
完整的算法如下,无需借用空间,也无需对整个序列排序。
#include <stdio.h>
void main()
{
int last = 3;
int cur = 100;
int pos = -1;
int array[9] = {4,3,7,5,9,4,7,6,2};
for(int i = 0; i < 9; i++)
{
for (int j = 0; j < 9; j++)
{
if (array[j] > last && array[j] < cur)
{
cur = array[j];
pos = j;
}
}
if (pos != -1)
printf("a%d = %d\n", pos + 1, cur);
else
break;
last = cur;
cur = 100;
pos = -1;
}
}
‘叁’ 各种排序算法比较
插入排序 n*n、希尔排序 <=n*n、起泡排序 <=n* n、快速排序 n *log 2 n、选择排序=n * n、堆排序n * log2 n、归并排序 n * n
‘肆’ 给定如下整数列表,如何最有效的进行排序同时剔除重复的数字
#include<stdio.h>
#include"string.h"
int main(void)
{
char str1[500]={0},str2[256]={0};//定义二个数组,并赋初值为0
int i;
gets(str1);//读取一个字符串
for(i=0;str1[i];i++)
{
str2[str1[i]]=1;//str1中每个字符的assic码作为str2的下标值,并把对应位置填充为1,同一个字符的assci值相同,所以这样就去掉了重复字符
}
for(i=0;i!=256;i++)
if(str2[i]==1)//判断数组中被str1填充的位置,填充的是非0值,没填充的是0值
printf("%c",i);//输出str2的下标值,对应str1中的字符值
putchar('\n');
return 0;
}
‘伍’ 对全国高考分数排名用什么排序算法好在线等解答
应该是计数排序,因为高考成绩是值为0~750分的整数,而且就算分数有什么0.5,高考也会干脆搞四舍五入,或者直接不给0.5,来确保所有分值都是整数,给计数排序提供了可行性。
计数排序可以将时间复杂度降到最低,为o(n+r),n为人数(约1000万人!),r=满分+1=751;而简单排序法如冒泡 、选择、插入的时间复杂度都会达到o(n^2)。而且计数排序所用时间长度还比较稳定,最好与最坏的情况基本没有什么差距。
这样算来,计数排序在时间上整整领先了8个数量级,而如今处理器的频率都是几个GHz(10^9 Hz级别),还是多核的,10的8~9次方的处理次数在时间上不会造成过大的负担。
内存占用上,虽然这个算法有一定空间复杂度,为o(n+r),高考全国统一考号为14位,需要以长整数的格式存储(最大值约为9.223*10^18),所以每个考号占8个字节,总共8*(n+r)字节,折算下来大概80多MB,而且原始表单存储在硬盘里,整个计分程序的内存占用,满打满算也就是你用浏览器看几个网页的内存占用,这对现在的电脑不是轻轻松松?无论是处理速度还是内存占用,在高考总分排名上,计数排序都是最优方案,拥有最高效率。
再者,计数排序还可以带来一个不错的副产物,就是每个分值(或分段)的人数也可以在最后用表格的方式生成,在数据库内给考生排好序的同时,也给院校招生,与考生估测自己可以进哪个院校,都提供了方便。
总之,虽然我没有亲自参与过这个项目,我只是被排名,被院校挑选的,但是最后,我凭借自己所学的知识,推理出了高考分数的排名机制——计数排序。
补充知识:
计数排序,是给最大最小值差距不大的一组整数(整数的个数可以很多)排序的一种算法,例如高考总分0~750分,考试分数0~100(或150)分,之类的。它不是很依赖大小的比较,它主要的机制是,遍历整个原始表单,记住每个对应数值上的对象个数,很多时候也得存储这些对象对应的编号,这些事作完以后,再根据数值顺序,给出已经排序完毕的表单,还可以顺便生成每个数值,或数值段的人数。计数排序算法在处理特定任务上有较大优势。
‘陆’ 假定整数在计算机内部以4个字节表示,请给出一个有效的整数排序算法
10亿个整形数据,可以采用位图的方法进行处理。只要对这10亿个数据遍历1边就可完成排序。输出结果的时候同样遍历一遍即可。
‘柒’ 10个整数从小到大排序的算法流程
void sort(a[],n)
{
for(i=0,i
‘捌’ 排序算法性能比较(数据结构)C语言程序
这题你只要把每个算法的程序代码看一下,在计算下就行
冒泡排序:两个循环,从1加到N,(1+N)N/2 = 500500,最坏交换情况是每次判断都要交换,既500500*3次
选择排序:也是两个循环,比较次数跟冒泡排序一样500500,但是这个只要底层循环交换,既只需1000*3 = 3000次赋值。
插入排序:循环次数一样500500,但是这个最坏情况是每比较一次就赋值一次,既需500500次赋值
希尔排序:时间复杂度是N^1.3倍,比较次数和赋值应该是1000^1.3次方。
归并排序和快速排序,你去查查它的时间复杂度是怎么算,O(lgN*N),好像有系数,算法导论那本书上有,现在不记得是多少了。
希望能帮到你,
‘玖’ 数据结构中哪种排序方式效率最好
简单排序的算法(直接插入,冒泡,简单选择排序)简单且稳定,适合与待排记录较小的情况,当当待排序的关键码序列已经基本有序时,用直接插入排序最快。
就平均时间的性能而言,快速排序最佳,即排序速度最快,所以在随机情况下,快速排序是最佳选择。一般情况下,快速排序效率最好。
既要节省空间,又要有较快的排序速度,堆排序是最佳选择,其不足之处是建堆时需要消耗较多时间。
若希望排序是稳定的,且有较快的排序速度,则可选用2路归并排序,其缺点需要较大的辅助空间分配。
‘拾’ 整数排序算法的问题
快排(最普遍 最简单)
算法思想为 分治
实现过程如上 gis19831203 所说的
“寻找枢轴(位于枢轴左边的都比枢轴小,位于枢轴右边的都比枢轴大),反复如此,用递归可以实现。”
堆排(不稳定,但是一种解决某类问题有效的算法思想)
……
这是时间复杂度为 N*(log2 N)的算法
更快的算法我就不知道了!!
你的最大数据的运算量为
2^32*32
估计……
即使是这样的算法也要几十分钟的运算时间!!!
除非你用超级计算机。。。
冒泡,插入……等N^2的算法
就不用考虑了
快排需要预先读入所有数据
堆排好像就不需要 可以一个一个读 建立堆
然后进行操作 但是 堆也是需要完整记录的
鉴于你的最大数据量为2^32!!
仅仅从空间上来说就不好满足~~~
即使算法效率很高,很快,很牛。
一般的编辑器也很难满足你的最大数据的要求
对操作系统的要求也很苛刻(建议用Linix)
C 好像自带 排序函数
!!!!!!!
原来是这样。。
无语……
这样的话用 快排算法
50万也就是0。01秒吧(应该是瞬间的事情)
你用的算法是N^2的算法 太慢了
一般来说这类题要求的时间应该在0。1sec~1sec之间
考察的知识点就是时间复杂度为 N*(log2 N)的排序算法
你的程序无法在限定时间内完成所有数据的测试
建议使用快排算法
到网上 搜一艘 此类算法的讲解
找到合适你自己的讲解 然后学习。。。。