表格里的日期如何排序
展开全部
排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记录序列。分内部排序和外部排序,若整个排序过程不需要访问外存便能完成,则称此类排序问题为内部排序。反之,若参加排序的记录数量很大,整个序列的排序过程不可能在内存中完成,则称此类排序问题为外部排序。内部排序的过程是一个逐步扩大记录的有序序列长度的过程。[1]
中文名
排序
外文名
sequence
性质
计算机内经常进行的一种操作
排序算法
快速排序、希尔排序、堆排序等
分类
稳定排序等
快速
导航
冒泡排序选择排序插入排序希尔排序快速排序箱排序归并排序树型排序
概念
将杂乱无章的数据元素,通过一定的方法按关键字顺序排列的过程叫做排序。[2]
常见排序算法
快速排序、希尔排序、堆排序、直接选择排序不是稳定的排序算法,而基数排序、冒泡排序、直接插入排序、折半插入排序、归并排序是稳定的排序算法。[1]
分类
◆稳定排序:假设在待排序的文件中,存在两个或两个以上的记录具有相同的关键字,在
用某种排序法排序后,若这些相同关键字的元素的相对次序仍然不变,则这种排序方法
是稳定的。其中冒泡,插入,基数,归并属于稳定排序,选择,快速,希尔,归属于不稳定排序。[3]
◆就地排序:若排序算法所需的辅助空间并不依赖于问题的规模n,即辅助空间为O(1),
则称为就地排序。
冒泡排序
原理
已知一组无序数据a[1]、a[2]、……a[n],需将其按升序排列。首先比较a[1]与a[2]的值,若a[1]大于a[2]则交换两者的值,否则不变。再比较a[2]与a[3]的值,若a[2]大于a[3]则交换两者的值,否则不变。再比较a[3]与a[4],以此类推,最后比较a[n-1]与a[n]的值。这样处理一轮后,a[n]的值一定是这组数据中最大的。再对a[1]~a[n-1]以相同方法处理一轮,则a[n-1]的值一定是a[1]~a[n-1]中最大的。再对a[1]~a[n-2]以相同方法处理一轮,以此类推。共处理n-1轮后a[1]、a[2]、……a[n]就以升序排列了。降序排列与升序排列相类似,若a[1]小于a[2]则交换两者的值,否则不变,后面以此类推。 总的来讲,每一轮排序后最大(或最小)的数将移动到数据序列的最后,理论上总共要进行n(n-1)/2次交换。[2]
优劣
优点:稳定。
缺点:慢,每次只能移动相邻两个数据。
Pascal程序
program name;
var
a:array[1..N] of 1..MAX;
temp,i,j:integer;
begin
randomize;
for i:=1 to N do a:=1+random(MAX);
writeln('Array before sorted:');
for i:=1 to N do write(a,' ');
writeln;
for i:=N-1 downto 1 do
for j:=1 to i do
if a[j]<a[j+1] then
begin
temp:=a[j];
a[j]:=a[j+1];
a[j+1]:=temp
end;
writeln('Array sorted:');
for i:=1 to N do write(a,' ');
writeln;
writeln('End sorted.');
readln;
end.
c++程序
对N个数进行从小到大排序:
#include <bits/stdc++.h>
using namespace std;
int a[101];
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)//输入数据
cin>>a[i];
for(int i=1;i<n;i++)
{
bool flag=true;
for(int j=1;j<=n-i;j++)
{
if(a[j+1]<a[j])//如果后面的数比前面的数小,则需要交换
{
swap(a[j+1],a[j]);//交换相邻的两个数
flag=false;
}
}
if(flag)//如果在这一轮都没有进行交换,则说明该序列已经有序,不需要进行下一轮
break;
}
for(int i=1;i<=n;i++)//输出排列后的数据
cout<<a[i]<<" ";
cout<<endl;
return 0;
}
中文名
排序
外文名
sequence
性质
计算机内经常进行的一种操作
排序算法
快速排序、希尔排序、堆排序等
分类
稳定排序等
快速
导航
冒泡排序选择排序插入排序希尔排序快速排序箱排序归并排序树型排序
概念
将杂乱无章的数据元素,通过一定的方法按关键字顺序排列的过程叫做排序。[2]
常见排序算法
快速排序、希尔排序、堆排序、直接选择排序不是稳定的排序算法,而基数排序、冒泡排序、直接插入排序、折半插入排序、归并排序是稳定的排序算法。[1]
分类
◆稳定排序:假设在待排序的文件中,存在两个或两个以上的记录具有相同的关键字,在
用某种排序法排序后,若这些相同关键字的元素的相对次序仍然不变,则这种排序方法
是稳定的。其中冒泡,插入,基数,归并属于稳定排序,选择,快速,希尔,归属于不稳定排序。[3]
◆就地排序:若排序算法所需的辅助空间并不依赖于问题的规模n,即辅助空间为O(1),
则称为就地排序。
冒泡排序
原理
已知一组无序数据a[1]、a[2]、……a[n],需将其按升序排列。首先比较a[1]与a[2]的值,若a[1]大于a[2]则交换两者的值,否则不变。再比较a[2]与a[3]的值,若a[2]大于a[3]则交换两者的值,否则不变。再比较a[3]与a[4],以此类推,最后比较a[n-1]与a[n]的值。这样处理一轮后,a[n]的值一定是这组数据中最大的。再对a[1]~a[n-1]以相同方法处理一轮,则a[n-1]的值一定是a[1]~a[n-1]中最大的。再对a[1]~a[n-2]以相同方法处理一轮,以此类推。共处理n-1轮后a[1]、a[2]、……a[n]就以升序排列了。降序排列与升序排列相类似,若a[1]小于a[2]则交换两者的值,否则不变,后面以此类推。 总的来讲,每一轮排序后最大(或最小)的数将移动到数据序列的最后,理论上总共要进行n(n-1)/2次交换。[2]
优劣
优点:稳定。
缺点:慢,每次只能移动相邻两个数据。
Pascal程序
program name;
var
a:array[1..N] of 1..MAX;
temp,i,j:integer;
begin
randomize;
for i:=1 to N do a:=1+random(MAX);
writeln('Array before sorted:');
for i:=1 to N do write(a,' ');
writeln;
for i:=N-1 downto 1 do
for j:=1 to i do
if a[j]<a[j+1] then
begin
temp:=a[j];
a[j]:=a[j+1];
a[j+1]:=temp
end;
writeln('Array sorted:');
for i:=1 to N do write(a,' ');
writeln;
writeln('End sorted.');
readln;
end.
c++程序
对N个数进行从小到大排序:
#include <bits/stdc++.h>
using namespace std;
int a[101];
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)//输入数据
cin>>a[i];
for(int i=1;i<n;i++)
{
bool flag=true;
for(int j=1;j<=n-i;j++)
{
if(a[j+1]<a[j])//如果后面的数比前面的数小,则需要交换
{
swap(a[j+1],a[j]);//交换相邻的两个数
flag=false;
}
}
if(flag)//如果在这一轮都没有进行交换,则说明该序列已经有序,不需要进行下一轮
break;
}
for(int i=1;i<=n;i++)//输出排列后的数据
cout<<a[i]<<" ";
cout<<endl;
return 0;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询