首页技术数组排序c语言,c语言码龄1年

数组排序c语言,c语言码龄1年

编程之家2026-05-29698次浏览

大家好,关于数组排序c语言很多朋友都还不太明白,今天小编就来为大家分享关于c语言码龄1年的知识,希望对各位有所帮助!

数组排序c语言,c语言码龄1年

求C语言将数组元素大小排序!!

C语言将数组元素大小排序方法:

以下使用的是冒泡排序法实线数组从小到大排序。

思想:每次相邻两个数比较,若升序,则将大的数放到后面,一次循环过后,就会将最大的数放在最后。

10、2、3、4、5、6、9、8、7、1是输入的待排序的数列,经过第一次排序,将最大的,10放在最后,第二次排序,将剩下的2、3、4、5、6、9、8、7、1进行冒泡,将当前最大的9放在倒数第二的位置,以此类推。

以下是具体代码:

#include<stdio.h>

数组排序c语言,c语言码龄1年

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; i<10-1; i++){

isSorted= 1;//假设剩下的元素已经排序好了

数组排序c语言,c语言码龄1年

for(j=0; j<10-1-i; j++){

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

temp= nums[j];

nums[j]= nums[j+1];

nums[j+1]= temp;

isSorted= 0;//一旦需要交换数组元素,就说明剩下的元素没有排序好

}

}

if(isSorted) break;//如果没有发生交换,说明剩下的元素已经排序好了

}

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

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

}

printf("

");

return 0;

}

扩展资料:

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

以下使用的是选择排序法实现数组从小到大排序。

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

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

以下是具体代码:

#include<stdio.h>

int main(void){

int a[1001];

int n,i,j,t;

scanf("%d",&n);//n为要排序的数的个数

//输入需要排序的数

for(i=0;i<n;++i)

scanf("%d",a+i);

//接下来进行排序

for(i=0;i<n-1;++i)//因为每次需要和a[i]后面的数进行比较,所以到a[n-2](倒数第2个元素)就行

{

for(j=i+1;j<n;++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;j<n;++j)

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

printf("

");

}

return 0;

}

C语言编写函数,数组排序

void Swap(int*a, int*b)

{

int tmp=*a;

*a=*b;

*b= tmp;

}

void Selectsort(int*arr, int sz)

{for(int end=sz-1; end>=0; end--)

{

int max= end;

int i;

for( i= 0; i<= end; i++)//选出最大下标

{

if(arr[i]> arr[max])

{

max= i;

}

}

Swap(&arr[end],&arr[max]);

}

}

int main()

{

int arr[5]={ 1, 3, 2, 5, 4};

int sz= sizeof(arr)/ sizeof(arr[0]);

for(int i= 0; i<= sz- 1; i++)

{

scanf("%d",&arr[i]);

}

Selectsort(arr, sz);

for(int i= 0; i<= sz- 1; i++)

{

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

}

system("pause");

return 0;

}

扩展资料:printf函数使用注意事项

1、域宽

%d:按整型数据的实际长度输出。

如果想输出指定宽度可以指定域宽,%md--&gt;m域宽,打印出来以后,在控制台上,显示m位;

如果要打印的数的位数如果超过我们设定m则原样输出;

如果要打印的数的位数如果小于设定的位数,则补空白,具体如下:

如果m为正数,则左对齐(左侧补空白);

如果m为负数,则右对齐(右侧补空白)。

2、转义字符

如果想输出字符"%",则应该在“格式控制”字符串中用连续两个%表示。

如:printf("%f%%",1.0/3);输出结果:0.333333%。

C语言数组A用选择排序

定义一个整型数组a[n],下面用五种方法对其从小到大排序。

(1)“冒泡法”

冒泡法大家都较熟悉。其原理为从a[0]开始,依次将其和后面的元素比较,若a[0]>a[i ],则交换它们,一直比较到a[n]。同理对a[1],a[2],...a[n-1]处理,即完成排序。下面列出其代码:

void bubble(int*a,int n)/*定义两个参数:数组首地址与数组大小*/

{

int i,j,temp;

for(i=0;i<n-1;i++)

for(j=i+1;j<n;j++)/*注意循环的上下限*/

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

temp=a[i ];

a[i ]=a[j];

a[j]=temp;

}

}

冒泡法原理简单,但其缺点是交换次数多,效率低。

下面介绍一种源自冒泡法但更有效率的方法“选择法”。

(2)“选择法”

选择法循环过程与冒泡法一致,它还定义了记号k=i,然后依次把a[k]同后面元素比较,若a[k]>a[j],则使k=j.最后看看k=i是否还成立,不成立则交换a[k],a[i ],这样就比冒泡法省下许多无用的交换,提高了效率。

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;

}

}

}

选择法比冒泡法效率更高,但说到高效率,非“快速法”莫属,现在就让我们来了解它。

(3)“快速法”

快速法定义了三个参数,(数组首地址*a,要排序数组起始元素下标i,要排序数组结束元素下标j).它首先选一个数组元素(一般为a[(i+j)/2],即中间元素)作为参照,把比它小的元素放到它的左边,比它大的放在右边。然后运用递归,在将它左,右两个子数组排序,最后完成整个数组的排序。下面分析其代码:

void quick(int*a,int i,int j)

{

int m,n,temp;

int k;

m=i;

n=j;

k=a[(i+j)/2];/*选取的参照*/

do{

while(a[m]<k&&m<j) m++;/*从左到右找比k大的元素*/

while(a[n]>k&&n>i) n--;/*从右到左找比k小的元素*/

if(m<=n){/*若找到且满足条件,则交换*/

temp=a[m];

a[m]=a[n];

a[n]=temp;

m++;

n--;

}

}while(m<=n);

if(m<j) quick(a,m,j);/*运用递归*/

if(n>i) quick(a,i,n);

}

(4)“插入法”

插入法是一种比较直观的排序方法。它首先把数组头两个元素排好序,再依次把后面的元素插入适当的位置。把数组元素插完也就完成了排序。

void insert(int*a,int n)

{

int i,j,temp;

for(i=1;i<n;i++){

temp=a[i ];/*temp为要插入的元素*/

j=i-1;

while(j>=0&&temp<a[j]){/*从a[i-1]开始找比a[i ]小的数,同时把数组元素向后移*/

a[j+1]=a[j ];

j--;

}

a[j+1]=temp;/*插入*/

}

}

(5)“shell法”

shell法是一个叫 shell的美国人与1969年发明的。它首先把相距k(k>=1)的那几个元素排好序,再缩小k值(一般取其一半),再排序,直到k=1时完成排序。下面让我们来分析其代码:

void shell(int*a,int n)

{

int i,j,k,x;

k=n/2;/*间距值*/

while(k>=1){

for(i=k;i<n;i++){

x=a[i ];

j=i-k;

while(j>=0&&x<a[j]){

a[j+k]=a[j ];

j-=k;

}

a[j+k]=x;

}

k/=2;/*缩小间距值*/

}

}

上面我们已经对几种排序法作了介绍,现在让我们写个主函数检验一下。

#include<stdio.h>

/*别偷懒,下面的"..."代表函数体,自己加上去哦!*/

void bubble(int*a,int n)

{

...

}

void choise(int*a,int n)

{

...

}

void quick(int*a,int i,int j)

{

...

}

void insert(int*a,int n)

{

...

}

void shell(int*a,int n)

{

...

}

/*为了打印方便,我们写一个print吧。*/

void print(int*a,int n)

{

int i;

for(i=0;i<n;i++)

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

printf("\n");

}

main()

{/*为了公平,我们给每个函数定义一个相同数组*/

int a1[]={13,0,5,8,1,7,21,50,9,2};

int a2[]={13,0,5,8,1,7,21,50,9,2};

int a3[]={13,0,5,8,1,7,21,50,9,2};

int a4[]={13,0,5,8,1,7,21,50,9,2};

int a5[]={13,0,5,8,1,7,21,50,9,2};

printf("the original list:");

print(a1,10);

printf("according to bubble:");

bubble(a1,10);

print(a1,10);

printf("according to choise:");

choise(a2,10);

print(a2,10);

printf("according to quick:");

quick(a3,0,9);

print(a3,10);

printf("according to insert:");

insert(a4,10);

print(a4,10);

printf("according to shell:");

shell(a5,10);

print(a5,10);

}

OK,关于数组排序c语言和c语言码龄1年的内容到此结束了,希望对大家有所帮助。

cnc编程入门先学什么(cnc编程好学吗)ai生活节官网?ai生活节是什么意思