c语言数组排序方法

要对n个数字进行排序,首先输入n,然后输入n个数字。

选择排序法

# includestdio.h

int main()

{

int ac语言中的三种排序 C语言常用的排序算法有三种,分别是冒泡排序、选择排序和插入排序。

一、冒泡排序冒泡排序:

就是从第一个数开始,依次比较,在满足判断的条件下交换。代码实现(以降序排序为例)

# includestdio.h

int main()

{

int array[10] = { 6,9,7,8,5,3,4,0,1,2 };

内部温度;

for(int I = 0;i 10我)

{//循环次数

for(int j = 0;j 10-I-1;j)

{

if(数组[j]数组[j 1])

{//前一个数大于后一个数时,交换发生temp = array[j];

array[j]= array[j 1];

array[j 1]= temp;

}

}

}//打印数组for(int I = 0;i 10i ) printf("-",array[I]);返回0;}}

其次,选择排序以升序排序为例:

即在指定的下标数组元素(指定的下标元素一般从第一个元素开始,然后依次返回)之后,找出除指定下标元素之外的值与指定元素进行比较,满足条件时进行交换。冒泡排序和冒泡排序的区别可以理解为冒泡排序是两个相邻值的比较,而选择性排序是遍历数组找出数组元素与指定的数组元素进行比较。(以升序为例)

# includestdio.h

int main()

{

int array[10] = { 6,9,7,8,5,3,4,0,1,2 };

int temp,index

for(int I = 0;I 9;i ) {

index = I;

for(int j = I;j 10j)

{

if(数组[j]数组[索引])

index = j;

}

如果(我!=索引)

{

temp = array[I];

array[I]= array[index];

数组[索引]= temp;

}

for(int I = 0;i10:i)

printf("-"array[i])

返回0;

}

第三,快速排序

通过一次排序将待排序的数据分成两个独立的部分,其中一部分的所有数据都小于另一部分,然后按照这种方法对这两部分数据进行快速排序,整个排序过程可以递归进行,从而实现整个数据成为一个有序序列。

void QuickSort(int* arr,int size)

{

int temp,I,j;

for(I = 1;I尺寸;我)

for(j = I;j0;j -)

{

if(arr[j] arr[j-1])

{

temp = arr[j];

arr[j]= arr[j-1];

arr[j-1]= temp;

}

}

}

c语言数组的排序 可以使用气泡排序法。下面给出了一段代码,用于对给定的数组进行升序和降序排序。

#包含stdio.h

#包含时间. h

# defineelementtypeint/*元素类型*/

#定义LEN 100 /*最大数组长度*/

#定义ASC 0 /*升序*/

# defined C1/*降序*/

/*冒泡排序*/

/*参数描述:*/

/*elemType arr[]:排序目标数组*/

/*int len:元素数量*/

/*int order:排序方法;升序(从小到大):ASC;降序排列(从大到小):DESC*/

void bubbleSort (elemType arr[],int len,int order) {

int i,j,temp

for(I = 0;I len-1;我)

for(j = 0;j len100];

int i,j,t,p,n;

while (~scanf("%d",n))

{

for (i=0;in;i )

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

for (i=0;in-1;i )

{

p=i;

for (j=i 1;jn;j )

if (a[p]a[j])

p=j;

if (p!=j)

{

t=a[p];a[p]=a[i];a[i]=t;

}

}

for (i=0;in;i )

if (i!=n-1)

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

else

printf("%d\n",a[i]);

}

return 0;

}

冒泡排序

#includestdio.h

int main()

{

int i,j,t,n;int a[1000];

scanf("%d",n);

for(i=0;in;i )

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

for(j=0;j(n-1);j )

for(i=0;i(n-1)-j;i )

if(a[i]a[i 1])

{t=a[i];a[i]=a[i 1];a[i 1]=t;}

for(i=0;in;i )

{

if (i!=n-1)

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

else

printf("%d\n",a[i]);

}

return 0;

}

-[I;j ) {

If (order == ASC) {/*升序*/

if (arr[j] arr[j 1]) {

temp = arr[j];

arr[j]= arr[j 1];

arr[j 1]= temp;

}

}

Else if (order == DESC) {/*降序*/

if (arr[j] arr[j 1]) {

temp = arr[j];

arr[j]= arr[j 1];

arr[j 1]= temp;

}

}

}

}

/*打印数组*/

void printArr (elemType arr[],int len) {

int I;

for(I = 0;ilen我)

printf ("%d\t ",arr[I]);

putchar(' \ n ');

}

int main (void) {

elemType arr[LEN] = {3,5,1,7,2,9,6,8,10,4 };

int len

len = 10

Puts("初始数组:");

printArr (arr,len);

putchar(' \ n ');

Puts("升序:");

bubbleSort (arr,len,ASC);/*按冒泡升序排序*/

printArr (arr,len);

putchar(' \ n ');

Puts("降序:");

bubbleSort (arr,len,desc);/*降序冒泡排序*/

printArr (arr,len);

putchar(' \ n ');

getch();/*屏幕持久性*/

返回0;

}

运行结果

求C语言排序数组元素大小!! 用c语言实现数组元素大小排序的方法:

下面用冒泡排序法,实线数组从小到大排序。

思想:每次比较两个相邻的数字,如果按升序排列,最大的数字放在后面,一个循环后,最大的数字放在最后。

10、2、3、4、5、6、9、8、7和1是要排序的输入序列。第一次排序后,最大的10放在最后,第二次排序,剩余的2、3、4、5、6、9、8、7、1冒泡,加上当前最大的9。

以下是具体代码:

#包含stdio.h

int main(){

int nums[10] = {10,2,3,4,5,6,9,8,7,1 };

int i,j,temp,isSorted

//优化算法:最多n-1轮比较。

for(I = 0;i10-1;i ){

is sorted = 1;//假设剩余的元素已经排序。

for(j = 0;j10100];

int i,j,t,p,n;

while (~scanf("%d",n))

{

for (i=0;in;i )

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

for (i=0;in-1;i )

{

p=i;

for (j=i 1;jn;j )

if (a[p]a[j])

p=j;

if (p!=j)

{

t=a[p];a[p]=a[i];a[i]=t;

}

}

for (i=0;in;i )

if (i!=n-1)

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

else

printf("%d\n",a[i]);

}

return 0;

}

冒泡排序

#includestdio.h

int main()

{

int i,j,t,n;int a[1000];

scanf("%d",n);

for(i=0;in;i )

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

for(j=0;j(n-1);j )

for(i=0;i(n-1)-j;i )

if(a[i]a[i 1])

{t=a[i];a[i]=a[i 1];a[i 1]=t;}

for(i=0;in;i )

{

if (i!=n-1)

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

else

printf("%d\n",a[i]);

}

return 0;

}

-[I;j ){

if(nums[j] nums[j 1]){

temp = nums[j];

nums[j]= nums[j 1];

nums[j 1]= temp;

is sorted = 0;//一旦数组元素需要交换,就意味着剩下的元素没有排序好。

}

}

如果(分类)断裂;//如果没有交换,则剩余元素已经排序。

}

for(I = 0;i10i ){

printf("%d ",nums[I]);

}

printf(" \ n ");

返回0;

}

扩展数据:

其他从小到大排序数组的算法

下面使用选择排序方法从小到大对数组进行排序。

思想:从第一个数字开始,每次和后面剩下的数字比较。如果是升序,如果后面的数字比当前数字小,就换。与后面的所有数字进行比较交换后,将当前最小值放在当前位置。

输入顺序为10、2、3、4、5、6、9、8、7、1,最小的数放在第一位(a[0]与它后面的所有数进行比较,如果a[0]大于它后面的数,则交换),以此类推。

以下是具体代码:

#包含stdio.h

int main(void){

int a[1001];

int n,I,j,t;

scanf("%d ",n);//n是要排序的数字个数。

//输入要排序的数字。

for(I = 0;在;我)

scanf("%d ",a I);

//然后排序。

for(I = 0;in-1;I)//因为每次都需要和a[i]后面的数进行比较,所以可以直接去a[n-2](倒数第二个元素)。

{

for(j = I ^ 1;jn;J)//j从I之后的那个开始,比较a[i]和a[j]。

{

If(a[i]a[j])//a[i]是当前值。如果大于下面的a[j],就换。

{

t = a[I];

a[I]= a[j];

a[j]= t;

}

}//每次排序,a[i](包括a[i])之后的最小值会放在a[i]的位置。

for(j = 0;jn;j)

printf("%-5d ",a[j]);

printf(" \ n \ n ");

}

返回0;

}

相关文章

发表新评论