编写一个C语言程序,利用指针对数组进行排序,并解释所编写的代码

编写一个C语言程序,利用指针对数组进行排序,并解释所编写的代码,第1张

#include

<stdioh>

void

Sort(

int

s,

int

n

)

{

int

p

=

s;

//定义一个指向数组首地址的指针

int

q,

tmp;

for(

;

p

<

s+10;

p++

)

//当指针移动到数组的末端结束

{

for(

q

=

p

;

q

<

s+10;

q++

)

//按照插入排序的方式执行

{

if(

q

<

p

)

{

tmp

=

p;

p

=

q;

q

=

tmp;

}

}

}

}

int

main()

{

int

i;

int

s[10]

=

{9,8,7,6,5,4,3,2,1,0};

Sort(s,10);

//调用排序函数

for(

i

=

0;

i

<

10;

++i

)

//输出排序后的结果

{

printf("%d

",s[i]);

}

printf("\n");

return

0;

}

提问人的追问 2010-07-26 11:57 #include stdioh

void main()

{

int data[10]; /为什么要写这个整型数组/ (申请一个内存空间,用于存储输入的数据)

int i,j,temp;

printf("Please input 10 numbers: \n");

for(i=0;i10;i++)/这是什么意思?是不是循环?循环到哪里才跳出来。/(这句和下一句一起为输入语句,应输入10个int类型数据)

scanf("%d",data[i]);/是不是输入I? /

for(i=0;i10-1;i++)/是不是表示I=0,I10-1时,I就加1?/(冒泡排序开始,和下面代码一起组成冒泡排序。首先检查i是否符合条件,如符合则继续运行,否则循环停止。您在注释中理解正确)

for(j=0;j10-i;j++)/是不是表示I=0,I10-I时,J就加1?/

if(data[j]data[j+1])

{

temp=data[j];

data[j]=data[j+1];

data[j+1]=temp;

};

printf("\nthe result of sort: \n");

for(i=0;i10;i++)

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

}

注:关于最后一个问题不是很懂您的意思,如果还有什么问题请继续追问,我们一同研究解决

冒泡排序是比较经典的排序算法。代码如下:

for(int i=1;i<arrlength;i++){

for(int j=1;j<arrlength-i;j++){

//交换位置

}    

原理:比较两个相邻的元素,将值大的元素交换至右端。

思路:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复第一趟步骤,直至全部排序完成。

第一趟比较完成后,最后一个数一定是数组中最大的一个数,所以第二趟比较的时候最后一个数不参与比较;

第二趟比较完成后,倒数第二个数也一定是数组中第二大的数,所以第三趟比较的时候最后两个数不参与比较;

依次类推,每一趟比较次数-1;

……

举例说明:要排序数组:int[] arr={6,3,8,2,9,1}; 

for(int i=1;i<arrlength;i++){

for(int j=1;j<arrlength-i;j++){

//交换位置

}    

参考资料:

冒泡排序原理

//冒泡算法

int num[5]; 

//输入

 for (int i = 0; i < 5; i++)

 {

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

 }

 bool fin = true;

 while(con)

 {

  con = false;

  //如果相邻两个数前一个比后一个小就交换

  for (int i = 0; i < 4;i++)

   if (num[i] < num[i + 1])

   {

    int n = num[i];

    num[i] = num[i + 1];

    num[i + 1] = n;

    con = true;

   }

  //如果相邻两个数前一个都大于等于后一个con就会等于false退出循环

 }

 //输出

 for (int i = 0; i < 5; i++)

 {

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

 }

void sort(int a, int n){

//当分组中的数据是1个或0个时,分组结束

if(n<=1)return;

//将数据分成两个组

int L,R;

L = 0;

R = n-1;

while(L<R){

while(L<R&&a[L]<=a[R]) R--;

swap(a[L], a[R]);

while(L<R&&a[L]<=a[R]) L++;

swap(a[L], a[R]);

}

//对左边的组再进行分组

sort(a, L);

//对右边的组再进行分组

sort(a+L+1,n-L-1);

}

以上就是关于编写一个C语言程序,利用指针对数组进行排序,并解释所编写的代码全部的内容,包括:编写一个C语言程序,利用指针对数组进行排序,并解释所编写的代码、C语言编程的系统中的排序代码,请逐条注释一下意思,谢谢,急用、java冒泡排序法代码等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/zz/9880627.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存