C语言排序

作者&投稿:年食 (若有异议请与网页底部的电邮联系)
C语言排序算法一共多少种~

选择排序
#include using namespace std;void select_sort(int arr[], int num);void output_array(int arr[], int num);int main(){ int a[10]; for(int i=0; i>a[i]; } select_sort(a,10); output_array(a,10); return 0;}void select_sort(int array[],int n) //形参array是数组名{ int i,j,k,t; for(i=0; i<n-1; i++) { k=i; //先设第i个就为最小 for(j=i+1; j<n; j++) if(array[j]<array[k]) k=j; //通过循环,得到k为最小 t=array[k]; //交换a[i]和a[k] array[k]=array[i]; array[i]=t; } return;}void output_array(int arr[], int num){ int i; for(i=0; i<num; i++) { cout<<arr[i]; cout<<endl; } return;}2.冒泡排序
#includeint main(){int i,j,a[10],t;for(i=0;ia[j]){t=a[j];a[j]=a[i];a[i]=t;}for(i=0;i<10;i++)printf("%d ",a[i]);return 0;}3.堆排序
#includeusing namespace std;void paidui(int a[20],int i,int m){int k,t; t=a[i]; k=2*i+1; while (k=0;i--) paidui(a,i,n); for (i=n-1; i>=1; i--) { k=a[0]; a[0]=a[i]; a[i]=k; paidui(a,0,i); }}int main() { int a[10],i; for(i=0;i>a[i];duipai(a,10); for(i=0;i<10;i++)cout<<a[i]<<endl;}4.快速排序
#includeusing namespace std;void Quicksort(int a[],int low,int high){ if(low>=high) { return; } int first=low; int last=high; int key=a[first]; while(first=key) --last; a[first]=a[last]; while(first>x){a[n]=x;n++;}n--;Quicksort(a,0,n);for(i=0;i<=n;i++)cout<<a[i]<<" ";cout<<endl; return 0;}5. 基数排序
#include #include int main(){int data[10]={73,22,93,43,55,14,82,65,39,81}; //对十个数进行排序int temp[10][10]={0}; //构造一个临时二维数组,其值为0int order[10]={0}; //构造一维数组,其值为0int i,j,k,n,lsd;k=0;n=1;for (i=0;i<10;i++) printf("%d ",data[i]); //在排序前,对这10个数打印一遍putchar('
');while (n<=10){for (i=0;i<10;i++){lsd=((data[i]/n)%10); //lsd先对个位取余,然后再对十位取余,注意循环temp[lsd][order[lsd]]=data[i]; //temp[3][0]=73,temp[2][0]=22,temp[3][1]=93,temp[3][2]=43,⋯⋯order[lsd]++; //需要区分的是lsd和order[lsd],这两个不是一样的概念嗷}printf("
重新排列: ");for (i=0;i<10;i++){if(order[i]!=0)for (j=0;j<order[i];j++){data[k]=temp[i][j];printf("%d ",data[k]);k++;}order[i]=0;}n*=10; //第二次用十位k=0;}putchar('
');printf("
排序后: ");for (i=0;i<10;i++) printf("%d ",data[i]);return 0;}6.希尔排序
#includeusing namespace std;void shell_sort(int a[],int n);int main(){ int n,a[10000]; cin>>n; for(int y=0;y>a[y]; shell_sort(a, n); for(int i=0; i0; gap--)//设置初始增量,递减; { for(int i=0; i=0&&a[k]>temp) { a[k+gap] = a[k]; k = k-gap; } a[k+gap] = temp; } } } }}7.归并排序
#includeusing namespace std;void MergeSort(int p[],int s,int m,int t){ int q[100]; //q[100]用来存放排好的序列 int i=s; int j=m+1; int k=s;while(i>n; for(int i=0; i>p[i]; Merge(p,0,n-1); for(int j=0;j<n;j++) cout<<p[j]<<" "; cout<<endl; return 0; }排序方法基本就这些,还有双向冒泡这种拓展的排序方法,还有直接排序如桶排序

void choise(int *a,int n)
{
int i,j,k,temp;
for(i=0;i<n-1;i++)
{
k=i; /*给记号赋值*/
for(j=i+1;j<n;j++)
if(a[k]>a[j]) k=j; /*是k总是指向最小元素*/
if(i!=k)
{
/*当k!=i是才交换,否则a[i]即为最小*/
temp=a[i];
a[i]=a[k];
a[k]=temp;
}
}
}

排序:基本排序算法
程序员可以使用5种:

路插入排序(insertionsort.)

路交换排序(exchangesOrt)

路选择排序(selectionsort)路排序(归并)合并

路分配排序(distributionsort)

为了生动地解释每个排序算法的工作原理,让我们来看看如何在桌子上,随机使用这些方法该卡支付排序。排序根据色卡只(顺序梅花,方块,红心和黑色心脏),而且还排序由点(从2到A)。

插入排序过程:从一堆卡片的顶部开始拿牌,每人持有一张卡,根据卡的原则纳入排序正确的位置的手中。在桌子上拿着卡后,递给排序的卡。

交换排序过程为:

(1)获得两张牌到手上。如果卡到左边在卡的背面右侧,以换取这两张牌的位置。

(2)然后把一张卡,如果有必要比较一下最右边的两张牌,以换取这两张牌的位置。

(3)重复步骤(2),直到所有的牌都拿到手。

(4)如果位置不再有任何需要交换的两张牌的手,就说明这个品牌已经被排序,否则,出牌桌上的双手,重复(1)至(4)步骤,直到他们的手来分类的。

选择排序过程:找到最小的卡牌在桌子上,并拿在手中,重复这个过程,直到所有的牌都在你手中。

归并排序过程:上表中的卡片被划分为52的反应器,每个反应器到卡上。因为每堆牌是有序的(记住,这个时候每个堆叠只有一个卡),所以如果卡分成两堆相邻桩,每样的堆卡,你可以得到26堆已排序的卡,然后每堆有两张卡。重复此合并操作,你可以把堆有13张牌(有四张牌中每根桩),7堆叠卡(有六个反应堆八张牌,有一堆的四张牌),最后将获得52桩卡。

分配排序(也称为基数排序,即基数排序)过程是:首先由卡13点到堆中,并根据卡叠在一起的顺序堆叠这13点,然后通过许可西装4分堆,那么这四张牌由花色顺序叠堆在它排序的卡。

在选择排序算法,你还需要了解以下条款:

(1)自然(自然)

如果某种有序的数据排序算法的比较快(工作变小),排序为无序的速度数据较慢(工作变大),我们称这种排序算法是很自然的。如果数据已接近有序,就需要考虑使用自然排序算法。

(2)稳定(稳定)

如果一个排序算法可以保持审议之前和之后的序列数据相等,我们称这种排序算法是稳定的。

例如,下面的现有列表:

玛丽·琼斯

玛丽·史密斯

汤姆·琼斯

苏西队列

如果上面的列表中一个稳定的排序算法由姓氏排序,那么“玛丽·琼斯”和“汤姆·琼斯”JR将维持原有的秩序,因为他们的姓是一样的后整理。

稳定的排序算法可以是一级,二级关键字的数据,如名字和姓氏(排序排序换句话说,按姓氏的主要排序,但在相同的姓氏,而且按名称排序的数据)。在具体实施时,按下第二个键进行排序,然后键排序。

(3)内部排序(内部排序)和外部排序的所有排序方法被称为内部排序,将排在磁盘,磁带的数据在内存中的数据(外部排序)

鳞次栉比,及其他事情存款排序方法被称为外部排序。

查找:

和排序算法,找到一个(搜索)算法也是研究最多的计算机科学问题。查找算法和排序算法是链接的,因为许多搜索算法依赖于数据集找到有序度。基本的搜索算法有以下四种:

路顺序查找(顺序检索)。

路查找比较(比较搜索)

路查找底数(基数搜索)

路哈希查找(哈希)

下面是照样出,以支付卡为例,描述这些算法的工作过程。

顺序查找过程如下:从第一个开始,看看每个卡,直到你找到找卡。

比较搜索(也称为binarysearching,即二进制搜索)的发牌条件已排序,其过程是:任意抽一张牌,如果卡找卡,然后找到该进程的结束。如果绘制的不是寻找更大的卡此卡,该卡在它前面反复查找操作,相反,品牌的背后是反复的查找操作,直到你找到找卡。 13分第一个卡插入堆,或按颜色分为四个桩:

基地查找过程。然后找到并找到点或卡那一堆相同花色的牌,然后在这堆使用的搜索算法中的任何一个寻找寻找卡牌。

哈希查找过程是:

(1)留在桌上可以放几堆卡空间,构造一个函数,根据花色和等级,以便它可以被映射到一个特定的品牌桩(该函数被调用散列函数,即哈希函数)。

(2)根据散列功能卡片分成若干堆。

(3)寻找到桩寻找基于散列函数在卡片上,然后找到望着这堆牌中的卡。

例如,您可以构建这样一个散列函数:

一堆=等级+西装

其中,职级是一个数字表示卡点;西装是一个数字表示牌的花色;说一堆一堆的价值,它决定了一堆卡片掉落。如果1,2,......,13表示一个,2,...... K,1,2,和3,分别与梅花,方块,红心和黑桃,然后堆放值将是1,2,...,16,这样就可以把一副牌分成16堆。

哈希查找,虽然看起来有点可笑,但它确实是一个非常有用的搜索算法。各种程序,从压缩程序(如堆高机)的磁盘缓存程序(如的SmartDrive),几乎所有的这种方式来提高搜索速度,或发现性能

排序:
>其中一个主要问题是排序和搜索的速度。这个问题往往被忽视,与程序的其他部分相比,还是觉得它需要排序的时间几乎可以忽略不计。然而,对于大多数应用程序,排序或查找,你不必花费大量的精力开始准备一些算法,但应可在选择最简单的算法之一(见3.1和3.4),当你发现算法当程序有更好的算法运行速度非常慢,而且回来(见下面的说明)使用。

这里有一个排序或搜索算法,以确定方法的速度。

一,引进的一种算法,它是指在所有情况下(最好和最差的平均值)查找需要进行排序或完成作业的数量,从而可以比较不同性能的复杂性的概念的算法。复杂性和数据进行排序或查找数据集针对

算法的量,因此,表达数据集的量引入基于所述算法的复杂度的表示。 最快的算法复杂度,它代表操作的数量无关,与算法的数据量。 O(N)的复杂度(N表示数据集的数量)指示操作的数目直接相关的数据的量的算法。为O(logN)的复杂性两者之间,其指示操作的数量和相关的算法的对数的数据量。复杂度为O(nlogn)的(N乘以logN)的算法比复杂度为O(N)的算法是缓慢的,而且复杂度为O(N2)算法慢。
注意:如果两种算法的复杂度为O(logN)的,则算法的logN的基数较大的速度要快于本章中的例子,logN的基数是10

额。。。想问一下你是想排序几个数字的数组?
如果你是排序10个数字的数组,那么数组定义的时候就少了,如果是排序9个数字的数组,那么打印的时候就会多打印一个数字。

for(j=i+1;j<=i+1;j++)
{
if(n[i]>n[j])
{
blank=n[i];n[i]=n[j];n[j]=blank;
}
应该是这个循环的问题。你这个循环只能执行一次啊。你的逻辑太复杂了,你把这个循环改用几个简单的语句实现试试。就是说在他上级的i循环中直接用n[i]和n[i+1]产生联系,或者在i循环中先写一句j=i+1;,然后用n[i]和n[j]之间的运算做。
由于以上的循环,我无法完全理解你的算法,所以只能讨论到这里,无法直接给出修改方案。
PS:你定义的数组M[]好像没有用到啊。
PPS:建议你修改之前还是画画流程图(算法图),自己先理清思路,不要顺着原来的思路钻了牛角尖。
PPPS:仔细研读一下C语言的经典排序方法:冒泡法。(当然还有其他几种,可以一并看一下)
以上。

#include <stdio.h>
void main()
{
int n[9],i,j,k;
for(i=0;i<9;i++)
scanf("%d",&n[i]);
for(i=0;i<9;i++)
for(j=0;j<9-k;j++)
{
if(n[j]<n[j+1])
{
k=n[j];
n[j]=n[j+1];
n[j+1]=k;
}
}
for(i=0;i<9;i++)
printf("%d ",n[i]);
}


c语言如何用选择排序对10个整数排序
for (i=0;i<10;i++) \/\/在c语言中,数组的下标从0开始 printf("%5d",a[i]); \/\/输出这10个数 printf("\\n"); \/\/以下8行是对这10个数排序 for (i=0;i<10;i++){min=i;for(j=i+1;j<10;j++)if (a[min]>a[j]) min=j;temp=a[i]; \/\/以下3行将a[i+1]~a[10]中...

c语言中如何对输入排序
第一步:输入a,b,c.第二步:比较a,b.若a>b,则执行第三步;否则,执行第四步.第三步:比较a,c.若a>c,则输出最大数max=a;否则,输出最大数max=c.第四步:比较b,c.若b>c,则输出最大数max=b;否则,输出最大数max=c.流程图:启示:自然语言与流程图是表示算法的两种方法,显然流程图更直观...

c语言的两种排序?
1、选择排序法 要求输入10个整数,从大到小排序输出 输入:2 0 3 -4 8 9 5 1 7 6 输出:9 8 7 6 5 3 2 1 0 -4 代码:include<stdio.h> int main(int argc,const char*argv[]){ int num[10],i,j,k,l,temp;\/\/用一个数组保存输入的数据 for(i=0;i<=9;i++){ scanf(...

C语言中汉字如何进行排序
C语言中,汉字是按照字符串来处理的,一个汉字占用2个字节,汉字的排序就是按照汉字的编码进行排序,而是半个汉字的ASCII码进行排序的。汉字字典顺序是按拼音排序的。最早的汉字区位码表基本按字典顺序进行编码,但收录的汉字不全,而且多音字也没有有效的处理,排录顺序会有不同。按区位码排序,可解决...

C语言选择排序法有哪些?
1、稳定排序和非稳定排序简单地说就是所有相等的数经过某种排序方法后,仍能保持它们在排序之前的相对次序,我们就说这种排序方法是稳定的。反之,就是非稳定的。比如:一组数排序前是a1,a2,a3,a4,a5,其中a2=a4,经过某种排序后为a1,a2,a4,a3,a5,则我们说这种排序是稳定的,因为a2排序前在a4的前面,排序后它还是...

c语言如何将一个数组按照指针排序?
方法有很多:1、可以直接找到数组对应行的元素,进行交换数据,改变原数组内容。2、可以定义指针数组指向每行的首地址,交换指针地址,按顺序打印每个指针为首的行数据,得到数据交换效果,原数组内容不变。我这里用第2种方法给你写了一个,你参考吧。include <stdio.h>int main (){ int nArry[4]...

在Word文档中,怎么样做才可以按英文字母的先后排序?
1、首先在Word文档中输入打乱顺序的英文字母,选中需要排序的字母。2、然后点击页面上方工具栏中的“排序”按钮。3、即可打开“排序”对话框,点击对话框左下角的“选项”。4、在打开的选项对话框中将排序语言更改为“英语”,点击确定。5、再将排序类型选择为“文本”并选择“升序”,点击确定。6、即可...

C语言冒泡排序法是怎么排序的?
C语言冒泡排序法的排序规则:将被排序的记录数组R[1..n]垂直排列,每个记录R看作是重量为R.key的气泡。根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R:凡扫描到违反本原则的轻气泡,就使其向上"飘浮"。如此反复进行,直到最后任何两个气泡都是轻者在上,重者在下为止。初始 R[1..n]为...

C语言中说的按字典顺序是什么意思?
就是说,将多个字符串的同一位置的字符按照26个字母的顺序进行比对。a最小,z最大。a < b;aa < ab; 因为第二位置上,前面字符串是a,后面字符串是b,所以是小于关系,以此类推。C语言排序算法:快速排序:1、假设我们给一个int数组进行排序,数组中数字初始序列为int a[9]={3,6,5,9,7...

C语言中要把三个数从大到小排列出来应该怎么编?
初学简单版本代码如下:include<stdio.h> int main( ){ int a, b, c;\/\/定义三个数的变量 int t ;\/\/定义作为交换的变量 scanf ( "%d%d%d" , &a, &b, &c ) ; \/\/取值 if ( a < b ){t = a; a = b; b = t ;};\/\/如果a,b,进行交换,反之不动 if ( a < c ){t ...

郊区19510804316: C语言排序的方法 -
箕民亚胺: 现在流行的排序有:直接插入排序、冒泡排序、简单选择排序、希尔排序、快速排序、堆排序、归并排序、基数排序.对n个记录进行选择排序的方法是:通过n-i次关键字之间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i(1<=i<=n)...

郊区19510804316: C语言10种排序方法? -
箕民亚胺: 1.比较法2.选择排序3.冒泡排序4.希尔排序5.快速排序6.堆排序7.合并排序8.基数排序9.折半插入排序10.直接插入排序

郊区19510804316: C语言中的排序法 -
箕民亚胺: c语言中排序法有选择法和冒泡法是最常见的. 1冒泡法对10个数排序 #include<stdio.h> voidmain() {inta[10]; inti,j,t; printf("pleaseinput10numbers:\n"); for(i=0;i<10;i++) scanf("%d",&a[i]); printf("\n"); for(j=0;j<9;j++)//进行9次循环,实现9次...

郊区19510804316: C语言数据排序 -
箕民亚胺: /*选择排序法:从小到大排列10个数并输出*/#include<stdio.h>#define N 10 //可修改输入个数 void main() { int i,a[N],t,j; for(i=0;i<N;i++) scanf("%d",&a[i]); //输入 for(j=1;j<N;j++) //N次比较 for(i=0;i<j;i++) //每趟中比j次if(a[i]>a[j]) //与a[i]后面的元素进行比较 { t=a[i];a[i]=a[j];a[j]=t; } printf("排序后:\n"); for(i=0;i<N;i++) printf("%d ",a[i]); printf("\n"); }

郊区19510804316: C语言中有哪些经典的排序方法 -
箕民亚胺: 有选择排序法和冒泡排序法两种,都是非常经典的排序方法,都是作为一个程序员必须掌握的排序方法. 这两种的区别在比较的逻辑不相同,因此if中的判断条件与for循环中的代码也是不相同的,要根据实际情况选择不同的排序方法.

郊区19510804316: C语言排序程序写法
箕民亚胺: 冒泡法!#include&lt;stdio.h&gt;int main(){int a[10],i,j,t;printf("Input 10 numbers:\n");for(i=0;i&lt;10;i++)scanf("%d",&amp;a[i]);printf("\n");for(i=0;i&lt;9;i++)for(j=0;j&lt;9-i;j++)if(a[j]&gt;a[j+1]){ t=a[j];a[j]=a[j+1];a[j+1]=t; }printf("The sorted numbers:\...

郊区19510804316: 使用C语言编程实现排序算法 -
箕民亚胺: #include<stdio.h> main() { struct { char mz[5]; int sd; char sbing[5]; int xs; }a[100],k; int i,b,j; printf("请输入球员数量\n"); scanf("%d",&b); for(i=0;i<b;i++) {printf("请输入第%d个球员的信息\n",i+1); printf("名字:"); scanf("%s",a[...

郊区19510804316: c语言排序程序 -
箕民亚胺: #include <stdio.h> void main() { int a[10]; int i,j,t; for(i=0;i<=9;i++) scanf("%d",&a[i]); for(i=0;i<9;i++) for(j=i+1;j<10;j++) { if(a[i]>a[j]) { /*交换从这里开始*/t=a[i];a[i]=a[j];a[j]=t;} } /*交换到这里结束*/ for(i=0;i<=9;i++) printf("%d ",a[i]); printf("\n"...

郊区19510804316: C语言中最常用的排序方法有哪些?
箕民亚胺: 序是程序设计中很重要的内容,其方法也很多,在C语言中有三种:冒泡法排序、选择法排序、插入法排序

郊区19510804316: c语言中的排序算法? -
箕民亚胺: 选择,冒泡,快排,堆排,基数,计数,二叉树,插入,归并,希尔排序,等等..

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网