重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
#includeiostream
创新互联建站-专业网站定制、快速模板网站建设、高性价比大方网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式大方网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖大方地区。费用合理售后完善,10多年实体公司更值得信赖。
#includealgorithm
using namespace std;
int main()
{
int a[10];
for(int i=0;i10;i++)
cina[i];
sort(a,a+10);
for(int i=0;i10;i++)
couta[i]" ";
coutendl;
}
c++ algorithm库里自带sort非递减排序
#includestdio.h
#includestring.h
void Sort(char s[][51],int n) {
char t[51];
int i,j,k;
for(i = 0; i n - 1; ++i) {
k = i;
for(j = i + 1; j n; ++j) {
if(strcmp(s[k],s[j]) 0)
k = j;
}
if(k != i) {
strcpy(t,s[i]);
strcpy(s[i],s[k]);
strcpy(s[k],t);
}
}
}
int main() {
char s[][51] = {"continue","break","for","while","struct","swicth","edit","copy","past","please"};
int i,n = 10;
printf("排序前:\n");
for(i = 0; i n; ++i)
printf("%s\n",s[i]);
Sort(s,10);
printf("\n排序后:\n");
for(i = 0; i n; ++i)
printf("%s\n",s[i]);
printf("\n");
return 0;
}
for(j=i+1;jn;j++)
{
if(a[j+1]a[i])//a[j+1]改成a[j]
{
t=a[i];
a[i]=a[j+1];//a[j+1]改成a[j]
a[j+1]=t;//a[j+1]改成a[j]
}
}
//希望对楼主有小小的帮助。。。
//排序的算法是二分法,N的对数时间复杂度。。。
//如果有疑问,我们可以再探讨。。。
#includestdlib.h
#includestring.h
#includestdio.h
bool merge(int * array,int p,int q,int r)
{
if(!(pqr)p=0r=sizeof(array)/sizeof(array[0])-1)
{
return false;
}
int * left =new int[q-p+1];
int * right=new int[r-q];
memcpy(left,array+p,sizeof(int)/sizeof(char)*(q-p+1));
memcpy(right,array+q+1,sizeof(int)/sizeof(char)*(r-q));
int left_index=0,right_index=0,left_max_index,right_max_index;
left_max_index=q-p+1;
right_max_index=r-q;
for(int k=p;k=rleft_indexleft_max_indexright_indexright_max_index;++k)
{
if(left[left_index]=right[right_index])
{
array[k]=left[left_index];
++left_index;
}
else
{
array[k]=right[right_index];
++right_index;
}
}
if(left_index==left_max_index)
{
for(;k=rright_indexright_max_index;++k,++right_index)
{
array[k]=right[right_index];
}
}
else if(right_index==right_max_index)
{
for(;k=rleft_indexleft_max_index;++k,++left_index)
{
array[k]=left[left_index];
}
}
delete left;
delete right;
return true;
}
void merge_sort(int * array,int p,int r)
{
if(pr)
{
int q=(r+p)/2;
merge_sort(array,p,q);
merge_sort(array,q+1,r);
merge(array,p,q,r);
}
}
void main()
{
int size,index,* array;
//printf("请输入元素个数:");
scanf("%d",size);
array=(int*)malloc(size*sizeof(int));
for(index=0;indexsize;index++)
{
//printf("请输入第%d元素:",index+1);
scanf("%d",array[index]);
}
merge_sort(array,0,size-1);
for(index=0;indexsize;index++)
{
printf("%d ",array[index]);
}
printf("\n");
}
SeqList L;//L只是个默认构造,在后面执行基本是统一的0值;执行前应该设置实体数据
L=Selection(L.length);//改为L=Selection(L);原函数调用与函数定义不符,有语法错误;L.length是个int 类型,函数定义的参数类型是SeqList;
SeqList Selection(SeqList L) 内部逻辑不够简捷,多多练习;
if (L.data[j]L.data [i]){}//可直接交换,k标志没什么作用。
1、冒泡排序(最常用)
冒泡排序是最简单的排序方法:原理是:从左到右,相邻元素进行比较。每次比较一轮,就会找到序列中最大的一个或最小的一个。这个数就会从序列的最右边冒出来。(注意每一轮都是从a[0]开始比较的)
以从小到大排序为例,第一轮比较后,所有数中最大的那个数就会浮到最右边;第二轮比较后,所有数中第二大的那个数就会浮到倒数第二个位置……就这样一轮一轮地比较,最后实现从小到大排序。
2、鸡尾酒排序
鸡尾酒排序又称双向冒泡排序、鸡尾酒搅拌排序、搅拌排序、涟漪排序、来回排序或快乐小时排序, 是冒泡排序的一种变形。该算法与冒泡排序的不同处在于排序时是以双向在序列中进行排序。
原理:数组中的数字本是无规律的排放,先找到最小的数字,把他放到第一位,然后找到最大的数字放到最后一位。然后再找到第二小的数字放到第二位,再找到第二大的数字放到倒数第二位。以此类推,直到完成排序。
3、选择排序
思路是设有10个元素a[1]-a[10],将a[1]与a[2]-a[10]比较,若a[1]比a[2]-a[10]都小,则不进行交换。若a[2]-a[10]中有一个以上比a[1]小,则将其中最大的一个与a[1]交换,此时a[1]就存放了10个数中最小的一个。同理,第二轮拿a[2]与a[3]-a[10]比较,a[2]存放a[2]-a[10]中最小的数,以此类推。
4、插入排序
插入排序是在一个已经有序的小序列的基础上,一次插入一个元素*
一般来说,插入排序都采用in-place在数组上实现。
具体算法描述如下:
⒈ 从第一个元素开始,该元素可以认为已经被排序
⒉ 取出下一个元素,在已经排序的元素序列中从后向前扫描
⒊ 如果该元素(已排序)大于新元素,将该元素移到下一位置
⒋ 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
⒌ 将新元素插入到下一位置中
⒍ 重复步骤2~5