C语言-for循环排序一维数组
今天有人问了一下怎么使用C语言的FOR循环去给数组排序、其实很简单、做一个简单的记录
代码如下:
#include<stdio.h>
#include<stdlib.h>
void conversion(int a[], int len);
int main()
{
int a[] = { 4,2,6,7,9 },i;
int len = sizeof(a) / sizeof(int);
conversion(a,len);
printf_s("从小到大排序为:");
for (i=0;i<len;i++)
{
printf_s(" %d ",a[i]);
}
printf_s("\n");
system("pause");
return 0;
}
void conversion(int a[],int len)
{
int i,j,t;
for (i=0;i<len-1;i++)
{
for (j=0;j<len-1-i;j++)
{
if (a[j]>a[j+1])
{
t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
}
}
}
}
效果图排序如下:
代码解释
- 首先构建思想、先定义一个int类型的一维数组、与len长度
int a[] = { 4,2,6,7,9 },i;
int len = sizeof(a) / sizeof(int);
- 创建“conversion”函数、用于for的循环、为了代码的美观和方便其他人维护的话可以选择这样、代码量少的话也可以直接写在main函数里面!
- 在“conversion”函数里面写上for实现代码。那么就需要main函数里面给他传递一些值进来
int a[] = { 4,2,6,7,9 },i;
int len = sizeof(a) / sizeof(int);
conversion(a,len);
- 上述代码就是main函数里面定义了值、然后我后面在创建一个函数、那么这个函数需要值、就这样把值放进去即可!
void conversion(int a[],int len)
- 这样conversion里面就有main函数里面声明的值了!下一步开始for运算、声明i,j,t为int、for循环一下
int i,j,t;
for (i=0;i<len-1;i++)
{
xxxxxxxx;
}
- 这里会有个小疑问?为什么len要-1呢? 其实你看一下数组的len的长度为"5",但是其实应该是从0开始数也就是4位!画张图就明白了!这里新手需要好好消化一下、有时候会被绕进去!但是千万别想复杂了!
- 当然你也可以直接不用len得到长度!直接小于5即可!这里是为了带入索引的概念才写的!
- 注意“所有的数组都是以 0 作为它们第一个元素的索引,也被称为基索引,数组的最后一个索引是数组的总大小减去 1。”
- 那么刚刚第一次for循环了得到了数组、在进行第二次for循环比较大小、并且调换位置排列
for (j=0;j<len-1-i;j++)
{
if (a[j]>a[j+1])
{
t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
}
}
- 主要地方就在于if判断中调换位置的区域可能会比较懵!可能有人会问“a[j]>a[j+1]”这是个什么东西?其实他就是得到a[j]
数后对比一下a[j+1]也就是下一位数字的大小!若是不太明白啥意思或者逻辑上理不清、建议使用vs的F5进行debug调试!
- 调换位置从小到大也很简单!
t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
- 声明一个t、t为空、t等于a[j]、注意看最后一句、“a[j + 1] = t;”、那么这样t这个int一直在变换、直到a[j+1]=t、t的值又被赋值给a[j+1]、这样if判断条件里面也可以继续得到值运算下去!
若是对文章内容不是很理解!建议使用vs的调式功能仔细去看函数!动手比看好很多!!!
原创文章,作者:纸飞机,如若转载,请注明出处:https://www.zfjsec.com/271.html
-- 展开阅读全文 --