c语言中排序方法

Python032

c语言中排序方法,第1张

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

排序主要分为以下几种。

1.冒泡排序:通过循环比较前后数的大小进行交换。最后使得数组有序。

2.快速排序:首先将第一个数作为一个基准,然后循环,将前半部分大于该数的与后半部分小于该数的进行交换,使得以该数为分界线,前面的小于该数,后面的大于该数,然后分前后两部分继续。

用选择排序法编写c语言,实现从键盘上输入10个数,按从大到小的顺序排序输出。代码如下:

#include<stdio.h>

int main()

{

int i,j,a[10],t

printf("输入数")

for (i = 0i <10i++)

scanf("%d",&a[i])

for (i = 0i <10i++)

{

for (j = i + 1j <10j++)

if (a[i] <a[j]){

t = a[i]

a[i] = a[j]

a[j] = t

}

}

printf("从大到小")

for (i = 0i <10i++)

printf("%2d", a[i])

return 0

}

扩展资料:

代码还可以设计,如下:

#include<stdio.h>

int main()

{

int a[10],i,j,t//定义数组

for(i=0i<10i++){

scanf("%d",&a[i])//给数组赋值

}

for(i=0i<9i++)//10个数,进行9轮比较

for(j=0j<10-ij++){//第一个数比较9次,依次递减

if(a[j]>a[j+1]) {//交换值

t=a[j]

a[j]=a[j+1]

a[j+1]=t

}

}

for(i=0i<10i++){

printf("%d\n",a[i])//输出数组的值

}

return 0

}

}

printf("the sorted numbers:\n")

for(i=0i<10i++)

printf(" %d",a[i])

printf("\n")

}

参考资料:百度百科-printf