突然发现有些编程思想遗忘,所以记录回忆一下:
1、冒泡法:
冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
int a[N]={20,40,-50,7,13};
int temp;
for(int i=0;i<N-1;i++)
{
for(int j=0;j<N-i;j++)
{
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
2、选择法:首先从N个数中找到最小值,放在第1个元素位置上,再从剩下的N-1个数中找出最小值,放在第2个元素位置上,这样不断重复下去,直到剩下最后一个数。
int a[N]={20,40,-50,7,13};
int min,k,temp;
for(int i=0;i<N;i++)
{
min =a[i];
k=i;
for(int j=i+1;j<N;j++)
{
if(min>a[j])
{
min=a[j];
k=j;
}
}
a[k]=a[i];a[i]=min;
}
3、插入排序: 每步将一个待排序的记录,按其顺序码大小插入到前面已经排序的字序列的合适位置(从后向前找到合适位置后),直到全部插入排序完为止int a[N]={20,40,-50,7,13};
int temp;
for(int i=0;i<N;i++)
{
temp=a[i];
for(int j=i;j>0&&temp<a[j-1];j--)
{
a[j]=a[j-1];
}
a[j]=temp;
}
}
4、希尔排序的原理:根据需求,如果你想要结果从大到小排列,它会首先将数组进行分组,然后将较大值移到前面,较小值移到后面,最后将整个数组组进行插入排序,这样比起一开始就用插入排序减少了数据交换和移动的次数,可以说希尔排序是加强版的插入排序
拿数组5, 2, 8, 9, 1, 3,4来说,数组长度为7,当increment为3时,数组分为两个序列5,2,8和9,1,3,4,第一次排序,9和5比较,1和2比较,3和8比较,4和比其下标值小increment的数组值相比较
此例子是按照从大到小排列,所以大的会排在前面,第一次排序后数组为9, 2, 8,5, 1, 3,4。第一次后increment的值变为3/2=1,此时对数组进行插入排序,实现数组从大到小排序。
int a[N]={20,40,-50,7,13};
int temp;
for(int k=N/2;k>0;k/=2)
{
for(int i=k;i<N;i++)
{
temp=a[i];
for(j=i;j>=k;j-=k)
{
if(temp>data[j-k];
{
a[j]=a[j-l];
}
else
{
break;
}
}
a[j]=temp;
}
}
5、快速排序法
通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分关键字小,则分别对这两部分继续进行排序,直到整个序列有序。