题目描述
对一维数组按照从小到大的顺序排序。程序定义函数sort()来实现数组a的排序。函数原型如下:
int sort(int a[], int n);
数组元素的输出调用PrintArr()。
输入
第一行输入一个整数n(1<=n<=10),表示数组有n个整数;第二行输入n个整数。
输出
输出占一行。对这n个整数数按照从小到大的顺序输出,数据之间用一个空格隔开。
样例输入
6
6 5 1 2 3 4
样例输出
1 2 3 4 5 6
提示
#include<iostream>
#include<algorithm>
using namespace std;
void PrintArr(int a[],int n)
{
int i;
for(i=0;i<n;i++)
{
if(i==0)
cout << a[i];
else
cout <<' '<< a[i];
}
}
int main()
{
int n;
cin>>n;
int data[n];
for(int i = 0; i < n; i++)
cin >> data[i];
sort(data,data+n);//data代表要排序数组的开始地址,我们知道数组名就是数组的开始地址。data+n代表数组的结束地址。在sort函数里面只需传数组的开始地址和结束地址就行了。
PrintArr(data,n);
return 0;
}
#include<iostream>
#include<algorithm>
using namespace std;
void PrintArr(int a[],int n)
{
int i;
for(i=0;i<n;i++)
{
if(i==0)
printf("%d",a[i]);
else
printf(" %d",a[i]);
}
}
int main()
{
int n;
scanf("%d",&n);
int data[n];
for(int i = 0; i < n; i++)
scanf("%d",&data[i]);
sort(data,data+n);//data代表要排序数组的开始地址,我们知道数组名就是数组的开始地址。data+n代表数组的结束地址。在sort函数里面只需传数组的开始地址和结束地址就行了。
PrintArr(data,n);
return 0;
}
#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int n,i;
scanf("%d",&n);
int data[n];
for(i = 0; i < n; i++)
scanf("%d",&data[i]);
sort(data,data+n);//data代表要排序数组的开始地址,我们知道数组名就是数组的开始地址。data+n代表数组的结束地址。在sort函数里面只需传数组的开始地址和结束地址就行了。
for(i=0;i<n;i++)
{
if(i==0)
printf("%d",data[i]);
else
printf(" %d",data[i]);
}
return 0;
}
疑问解答:如何在Codeblocks上新建C++的文件?
第一步:依次单击“file”、“new”、“file”。
第二步:双击“C/C++ source”,接着单击“next”
第三步:这时它会默认选择“C++”,继续单击“next”。
第四步:单击图中的三个点,选择一个保存文件的目录。完了之后,单击“finish”
第五步:这个时候就大功告成了。
代码示例四:C语言中有个qsort(quick sort快速排序函数),这个函数使用起来没有C++中的sort函数方便简单,因为使用qsort函数必须自己写一个比较函数,qsort包含在<stdlib.h>头文件中,此函数根据你给的比较条件进行快速排序,通过指针移动实现排序。排序之后的结果仍然放在原数组中。
虽说使用qsort稍微复杂点儿,但是也是几行代码就搞定的,感觉比写冒泡排序要强多了。
#include<stdio.h>
#include<stdlib.h>
int comp(const void*a,const void*b)//使用qsort函数必须自己写一个比较函数。
{
return *(int*)a-*(int*)b;//升序;
//return(*(int *)b-*(int *)a); //降序
}
int main()
{
int n;
scanf("%d",&n);
int i,t,a[n],j;
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
qsort(a,n,sizeof(int),comp);
for(i=0;i<n;i++)
{
printf("%d ",a[i]);
}
}
关于qsort函数:
以下是参考的网友博客:https://www.cnblogs.com/sooner/archive/2012/04/18/2455011.html
函数原型:
void qsort ( void * base, size_t num, size_t size, int ( * comparator ) ( const void *, const void * ) );
函数一共四个参数,没返回值。一个典型的qsort的写法如下:
void qsort(s,n,sizeof(s[0]),cmp);
关于cmp这个比较函数(这个函数名时我们自己定义的,大家也可以给它起其他名字 )。典型的cmp的定义是:
int cmp(const void *a,const void *b);
以下是参考的英文资料:
来源:https://msdn.microsoft.com/en-us/library/zes7xw0h.aspx
qsort
void qsort( void *base, size_t num, size_t width, int (__cdecl *compare )(const void *, const void *) );
Parameters
base
Start of target array.
num
Array size in elements.
width
Element size in bytes.
compare
Pointer to a user-supplied routine that compares two array elements and returns a value that specifies their relationship.
The qsort
function implements a quick-sort algorithm to sort an array of num
elements, each of width
bytes. The argument base
is a pointer to the base of the array to be sorted. qsort
overwrites
this array by using the sorted elements.
qsort
calls the compare
routine one or more times during the sort, and passes pointers to two array elements on each call.
compare( (void *) & elem1, (void *) & elem2 );
The routine compares the elements and returns one of the following values.
Compare function return value | Description |
---|---|
< 0 |
elem1 less than elem2
|
0 |
elem1 equivalent to elem2
|
> 0 |
elem1 greater than elem2
|
The array is sorted in increasing order, as defined by the comparison function. To sort an array in decreasing order, reverse the sense of "greater than" and "less than" in the comparison function.
This function validates its parameters. If compare
or num
is NULL
, or if base
is NULL
and *num
is nonzero, or if width
is less than zero, the invalid parameter handler
is invoked, as described in Parameter Validation. If execution is allowed to continue, the function returns
and errno
is set toEINVAL
.
Routine | Required header |
---|---|
qsort
|
<stdlib.h> and <search.h> |
// crt_qsort.c // arguments: every good boy deserves favor /* This program reads the command-line * parameters and uses qsort to sort them. It * then displays the sorted arguments. */ #include <stdlib.h> #include <string.h> #include <stdio.h> int compare( const void *arg1, const void *arg2 ); int main( int argc, char **argv ) { int i; /* Eliminate argv[0] from sort: */ argv++; argc--; /* Sort remaining args using Quicksort algorithm: */ qsort( (void *)argv, (size_t)argc, sizeof( char * ), compare ); /* Output sorted list: */ for( i = 0; i < argc; ++i ) printf( " %s", argv[i] ); printf( "\n" ); } int compare( const void *arg1, const void *arg2 ) { /* Compare all of both strings: */ return _stricmp( * ( char** ) arg1, * ( char** ) arg2 ); }
boy deserves every favor good