重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
#include stdio.h
成都创新互联专注于宁波企业网站建设,成都响应式网站建设公司,商城网站定制开发。宁波网站建设公司,为宁波等地区提供建站服务。全流程定制制作,专业设计,全程项目跟踪,成都创新互联专业和态度为您提供的服务
//选择排序算法,升序
void sort(int *arr,int n)
{
int i,j,k;
int tmp;
for(i=0;in-1;i++)
{
k=i; //开始一趟选择排序,假定第i个元素是后面n-i+1个未排序的元素中最小的元素
for(j=i+1;jn;j++)
{
if(arr[k] arr[j]) //如果发现比当前最小元素还小的元素,则更新记录最小元素的下标k
k=j;
}
//如果最小元素的下标不是后面n-i+1的未排序序列的第一个元素,则需要交换第i个元素和后面找到的最小元素的位置
if(k != i)
{
tmp=arr[k];
arr[k]=arr[i];
arr[i]=tmp;
}
}
}
int main()
{
int a[10]={ -5,-9,-8,3,9,2,-28,101,-395,0};
int i;
sort(a,10);
for(i=0;i10;i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}
//运行结果
F:\c_worka.exe
-395 -28 -9 -8 -5 0 2 3 9 101
include cstdlib 或 #include stdlib.h
qsort(void* base, size_t num, size_t width, int(*)compare(const void* elem1, const void* elem2))
参数表
*base: 待排序的元素(数组,下标0起)。
num: 元素的数量。
width: 每个元素的内存空间大小(以字节为单位)。可用sizeof()测得。
int(*)compare: 指向一个比较函数。*elem1 *elem2: 指向待比较的数据。
比较函数的返回值
返回值是int类型,确定elem1与elem2的相对位置。
elem1在elem2右侧返回正数,elem1在elem2左侧返回负数。
控制返回值可以确定升序/降序。
产生随机数的函数也是rand(),不是rank().
#include stdio.h
void mysort(int *p,int n){
int i,j,k;
for(i=0;in;i++){
for(k=i,j=k+1;jn;j++)
if(p[k]p[j])
k=j;
if(k-i)
j=p[k],p[k]=p[i],p[i]=j;
}
}
int main(int argc,char *argv[]){
int a[10]={100,90,80,70,60,50,40,30,20,10,},i;
mysort(a,10);
for(i=0;i10;printf("%d ",a[i++]));
printf("\n");
return 0;
}
输入10个字符串,并按字母从小到大排序
#include "stdio.h"
#include "string.h"
void sort(char array[][20],int n);
main(void)
{
char str[10][20];
int i,j,k,n;
printf("input n (n=10):");
scanf("%d",n);
printf("input %d string:",n);
for(i=0;in;i++)
gets(str[i]); //输入N个字符串
sort(str,n); //对输入的字符串排序
printf("sort string:\n");
for(i=0;in;i++)
puts(str[i]);
return 0;
}
void sort(char array[][20],int n) //定义排序函数
{
char temp[20];
int i,j,k;
for(i=1;in-1;i++)
{
k=i;
for(j=i+1;jn;j++)
if(strcmp(array[k],array[j])0)
k=j;
if(k!=i)
{
strcpy(temp,array[i]); //字符串交换顺序
strcpy(array[i],array[k]);
strcpy(array[k],temp);
}
}
}
如上源码所示,其实也不难发现,就一个排序函数便可以解决;解决思想,还是交换法;在这里明白字符串数组str[0],便是第一个主的字符串,跟这个2维str[0][20]是一个意思
void paixu(struct worker wor[10])
{
int i, j, k;
struct worker temp;
for (i = 0; i 9; i++)
{
k = i;
for (j = i + 1; j10; j++){
if (wor[j].numwor[k].num)
j = k;
}
if (k != i)
{
temp = wor[i]; wor[i] = wor[k]; wor[k] = temp;
}
}
for (i = 0; i 10; i++)
printf("%d,%s\n", wor[i].num, wor[i].name);
}
#include stdio.h
#include stdlib.h
#include string.h
#define EMPCNT 10
struct employee
{
int id;
char name[16];
};
void sort( struct employee *e )
{
int i,j;
struct employee temp;
for( i=0; iEMPCNT; i++ )
{
for( j=i+1;jEMPCNT;j++ )
{
if ( e[j].id e[i].id )
{
/* swap*/
temp = e[i];
e[i] = e[j];
e[j] = temp;
}
}
}
}
int search( struct employee *e, int id )
{
int low, high, mid;
low = 0;
high = EMPCNT - 1;
while( low = high )
{
mid = ( low+high ) / 2;
if ( id e[mid].id )
high = mid - 1;
else if ( id e[mid].id )
low = mid + 1;
else
return mid;
}
return -1;
}
void main()
{
struct employee e[EMPCNT];
int i, id=0, m=-1;
for( i=0; iEMPCNT; i++ )
{
printf( "输入第 %d 员工的员工号,姓名:", i+1 );
scanf( "%d %s", e[i].id, e[i].name );
fflush( stdin );
}
sort( e );
for( i=0; iEMPCNT; i++ )
printf( "%d %s\n", e[i].id, e[i].name );
printf("要查找的员工号:" );
scanf( "%d", id );
fflush( stdin );
m = search( e, id );
if ( m 0 )
printf( "%d 未找到\n", id );
else
printf( "%d %s\n", e[m].id, e[m].name );
getchar();
}