A. c语言中如何从大到小排列一个数组中的元素
先找不是0的元素个数
然后对前面部分进行排序即可。
函数如下
voidmy_sort(int*a)
{
intn,i,j;
intt;
for(n=0;a[n];n++);
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(a[i]<a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
自己写主函数 调用my_sort就好了。
B. c语言三种排序
常用的c语言排序算法主要有三种即冒泡法排序、选择法排序、插入法排序。
一、冒泡排序冒泡排序:
是从第一个数开始,依次往后比较,在满足判断条件下进行交换。代码实现(以降序排序为例)
#include<stdio.h>
int main()
{
int array[10] = { 6,9,7,8,5,3,4,0,1,2 };
int temp;
for (int i = 0; i < 10; i++)
{//循环次数
for (int j = 0; j <10 - i-1; j++)
{
if (array[j] < array[j+1])
{//前面一个数比后面的数大时发生交换 temp = array[j];
array[j] = array[j+1];
array[j + 1] = temp;
}
}
} //打印数组 for (int i = 0; i < 10; i++) printf("%2d", array[i]); return 0;}}
二、选择排序以升序排序为例:
就是在指定下标的数组元素往后(指定下标的元素往往是从第一个元素开始,然后依次往后),找出除指定下标元素外的值与指定元素进行对比,满足条件就进行交换。与冒泡排序的区别可以理解为冒泡排序是相邻的两个值对比,而选择排序是遍历数组,找出数组元素与指定的数组元素进行对比。(以升序为例)
#include<stdio.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 < 10; j++)
{
if (array[j] < array[index])
index = j;
}
if(i != index)
{
temp = array[i];
array[i] = array[index];
array[index] = temp;
}
for(int i=0;i<10:i++)
printf("%2d"array[i])
return 0;
}
三、快速排序
是通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
void QuickSort(int* arr, int size)
{
int temp, i, j;
for(i = 1; i <size; i++)
for(j=i; j>0; j--)
{
if(arr[j] <arr[j-1])
{
temp = arr[j];
arr[j]=arr[j-1];
arr[j-1]=temp;
}
}
}
C. c语言排序的方法
排序主要分为以下几种。
1.冒泡排序:通过循环比较前后数的大小进行交换。最后使得数组有序。
2.快速排序:首先将第一个数作为一个基准,然后循环,将前半部分大于该数的与后半部分小于该数的进行交换,使得以该数为分界线,前面的小于该数,后面的大于该数,然后分前后两部分继续。
D. C语言选择法排序
#include<stdio.h>
#defineM 5
void main()
{
int b[M],i,j,t,k;
for(i=0;i<M;i++)
scanf("%d",&b[i]);
for(i=0;i<M-1;i++)
{
for(k=i,j=i+1;j<M;j++)
if(b[k]<b[j])
k=j;
if(i!=k)
{
t=b[i];
b[i]=b[k];
b[k]=t;
}
}
for(i=0;i<M;i++)
printf("%d ",b[i]);
}
错在大括号位置加错了。
代码:
#include<stdio.h>
void SelectionSort(int *num,int n)
{
int i = 0;
int min = 0;
int j = 0;
int tmp = 0;
for(i = 0;i < n-1;i++)
{
min = i;//每次讲min置成无序组起始位置元素下标
for(j = i;j < n;j++)//遍历无序组,找到最小元素。
{
if(num[min]>num[j])
{
min = j;
}
}
if(min != i)//如果最小元素不是无序组起始位置元素,则与起始元素交换位置
{
tmp = num[min];
num[min] = num[i];
num[i] = tmp;
}
}
}
(此处空一行)
int main()
{
int num[6] = {5,4,3,2,9,1};
int i = 0;
SelectionSort(num,6);//这里需要将数列元素个数传入。有心者可用sizeof在函数内求得元素个数。
for(i = 0;i < 6;i++)
{
printf("%d ",num[i]);
}
return 0;
}
E. 用C语言如何将一个一维数组中的元素随机排序
#include
#include
#include
intmain()
{
inti,j,n,k,t,a[100];
srand((unsigned)time(NULL));
<p
利用rand()函数产生随机数字,rand()%n产生小于n的随机数,然后交换。
运行的结果:
#include
#include
intmain()
{
int&nbs
利用rand()函数产生随机数字,rand()%n产生小于n的随机数,然后交换。
(5)c语言中元素排序扩展阅读
C语言排序法
在一层循环找出最小数的下标,该下标用min保存,直到比较完整个数组,即可找到最小的数,然后将该数放入数组的第一位。
这样只能排好一个元素,于是需要再嵌套一层外层循环即可排好所有元素。第二次循环就不用再比较第一个元素了,因为第一个元素已经排好,依次类推,每一次循环就会排好一个,进行n-1次循环即可排好所有元素。
F. 求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>
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; //假设剩下的元素已经排序好了
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;
}
(6)c语言中元素排序扩展阅读:
其他将数组从小到大排序的算法
以下使用的是选择排序法实现数组从小到大排序。
思想:从第一个数开始,每次和后面剩余的数进行比较,若升序,则如果后边的数比当前数字小,进行交换,和后面的所有的数比较、交换后,就会将当前的最小值放在当前的位置
输入的序列为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;
}
G. C语言中的排序法
c语言中排序法有选择法和冒泡法是最常见的。
1冒泡法对10个数排序
#include<stdio.h>
void main ()
{ int a[10];
int i,j,t;
printf("please input 10 numbers:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
printf("\n");
for(j=0;j<9;j++) //进行9次循环,实现9次比较
for(i=0;i<9-j;j++) //在每一次比较中在进行9-j次比较
if(a[i]>a[i+1]) //相邻两数比较大的下沉即交换
{t=a[i+1];
a[i+1]=a[i];
a[i]=t;
}
printf("the sorted numbers :\n");
for(i=0;i<10;i++)
printf("%d",a[i]);
printf("\n");
}
不管有多少数只要改变一下都可以实现功能。定义一个大的数组,用多次循环就可以实现。
2选择法对10个数排序
此法没有冒泡法方便不在叙述 。
H. C语言将其元素按由大到小排序
#include
#include
typedef
struct
_n{
int
data;
struct
_n*n;}nude;
nude*
c(void){
return
(nude*)malloc(sizeof(nude));}
nude
*h,*b;
void
pai(nude*
h){
nude
*p,*q;
int
temp;
for(p=h;p!=b;p=p->n)
for(q=p->n;q!=b;q=q->n)
if(p->data
data){
temp=q->data;
q->data=p->data;
p->data=temp;}}
int
main(){
int
n,t;
h=c();
b=h;
printf("输入数字(以'-1'结尾)\n");
while(scanf("%d",&t)==1&&t!=-1){
b->data=t;
b->n=c();
b=b->n;}
pai(h);
printf("输出:\n");
while(h!=b){
printf("%d
",h->data);
h=h->n;}
return
0;}
I. c语言的两种排序
1、选择排序法
要求输入10个整数,从大到小排序输出
输入:2 0 3 -4 8 9 5 1 7 6
输出:9 8 7 6 5 3 2 1 0 -4
代码:
#include<stdio.h>
int main(int argc,const char*argv[]){
int num[10],i,j,k,l,temp;
//用一个数组保存输入的数据
for(i=0;i<=9;i++)
{
scanf("%d",&num<i>);
}
//用两个for嵌套循环来进行数据大小比较进行排序
for(j=0;j<9;j++)
{
for(k=j+1;k<=9;k++)
{
if(num[j]<num[k])//num[j]<num[k]
{
temp=num[j];
num[j]=num[k];
num[k]=temp;
}
}
}
//用一个for循环来输出数组中排序好的数据
for(l=0;l<=9;l++)
{
printf("%d",num[l]);
}
return 0;
}
2、冒泡排序法
要求输入10个整数,从大到小排序输出
输入:2 0 3-4 8 9 5 1 7 6
输出:9 8 7 6 5 3 2 1 0-4
代码:
#include<stdio.h>
int main(int argc,const char*argv[]){
//用一个数组来存数据
int num[10],i,j,k,l,temp;
//用for来把数据一个一个读取进来
for(i=0;i<=9;i++)
{
scanf("%d",&num<i>);
}
//用两次层for循环来比较数据,进行冒泡
for(j=0;j<9;j++)
{
for(k=0;k<9-j;k++)
{
if(num[k]<num[k+1])//num[k]<num[k+1]
{
temp=num[k];
num[k]=num[k+1];
num[k+1]=temp;
}
}
}
//用一个for循环来输出数组中排序好的数据
for(l=0;l<=9;l++)
{
printf("%d",num[l]);
}
return 0;
}
(9)c语言中元素排序扩展阅读:
return 0代表程序正常退出。return是C++预定义的语句,它提供了终止函数执行的一种方式。当return语句提供了一个值时,这个值就成为函数的返回值。
return语句用来结束循环,或返回一个函数的值。
1、return 0,说明程序正常退出,返回到主程序继续往下执行。
2、return 1,说明程序异常退出,返回主调函数来处理,继续往下执行。return 0或return 1对程序执行的顺序没有影响,只是大家习惯于使用return(0)退出子程序而已。
J. 用c语言给结构体中的元素排序
做一个结构数组就可以了,这也算是一种容器了吧?
struct protcol
{
char prot[16]; //协议名称
int num; //协议发生次数
};
protcol p[10];
p[0].prot = "FTP";p[0].num = 3;
//...
然后就是用num排序,就和普通int数组排序一样
然后再顺序输出