用c语言写一个排序函数 c语言中排序函数的用法

c语言,使用函数的选择法排序

void selectionsort(int a[],int m)

我们提供的服务有:成都网站设计、网站制作、微信公众号开发、网站优化、网站认证、江口ssl等。为成百上千企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的江口网站制作公司

{

int i,j;

int k;

int tmp;

for(i = 0; i  m-1; i++)//控制循环次数,n个数需要n-1次循环

{

k = i;

for(j = i+1; j  m ; j++)

{

if(a[j]  a[k])

k = j;

}

//i不等于k是就证明a[i]不是最小的,

//i等于k时证明a[i]就是本轮比较过程中最小的值

if(i != k)

{

tmp = a[i];

a[i] = a[k];

a[k] = tmp;

}

}

}

c语言 排序函数

首先这是一种快速排序的算法,你也应该知道,快速排序就是选择序列中的一个元素作为基准,通过循环找到这个基准最终的位置,并把所有小于这个基准的元素移到这个位置的左边,大于基本的元素移到右边,这样再对这个基准的左右两边分别递归调用自己,最终就能得到排序的结果。

再来解释一下这个例子,它选择的基准就是v[(left+right)/2],然后将这个基准雨v[left]交换,现在假设你想从头排序到最后,则你会将left传个0,也就是他将这个基准和V[0]交换了,这个时候开始循环,因为第一个元素是基准,所以从第二个元素开始循环(也就是left+1),然后到if判断部分,如果v[i]v[left],也就是说这个时候已经至少有一个元素比基准小了,所以基准至少在v[1]或者之后了,所以他把你找到的这个比基准小的v[i]和v[++last]交换,这时候v[i]的位置已经是在基准的正确位置或者之前了,不会在基准之后的,所以这就实现了把比基准小的元素移到基准的正确位置之前,你说的【第一遍执行过程中,第8行last=left=0,那么到了11行时相当于交换v[1]和v[0+1]】这没有错,确实是在自己交换自己,但是这样并不违背前面的思路不是么?当if条件不满足的时候,last是不会增加的,但是i会一直加1,所以last和i就会不同,这只是在将比基准小的元素移到基准之前,每有一个比基准小的,last就加1,这样当你循环一遍之后的last值就是基准应该在的位置,而且这个时候,所有比基本小的元素也都在last之前了,这时候last位置的元素也是比基准小的,这没关系,因为之后还有一句swap[v,last,left],到目前位置,基准的位置找到了,基准左边的元素都比基准小,右边都比基准大,再对基准的左右两边递归调用自己,就完成了序列的排序。

c语言怎样通过函数调用实现选择排序法

c语言通过函数调用实现选择排序法:

1、写一个简单选择排序法的函数名,包含参数。int SelectSort(int * ListData,int ListLength);

2、写两个循环,在循环中应用简单选择插入排序:

int SelectSort(int * ListData,int ListLength)

{

int i , j ;

int length = ListLength;

for(i=0;i=length-2;i++)

{

int k = i;

for(j=i+1;j=length-1;j++)

{

if(ListData[k]ListData[j])

{

k=j;

}

}

if(k!=i)

{

int tmp = ListData[i];

ListData[i] = ListData[k];

ListData[k] = tmp;

}

}

return 0;

}

3、对编好的程序进行测试,得出测试结果:

int main()

{

int TestData[5] = {34,15,6,89,67};

int i = 0;

printf("排序之前的结果\n");

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

printf("|%d|",TestData[i]);

int retData = SelectSort(TestData,5);

printf("排序之后的结果:\n");

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

printf("|%d|",TestData[i]);

return 0;

}

4、简单选择排序中,需要移动的记录次数比较少,主要的时间消耗在对于数据的比较次数。基本上,在比较的时候,消耗的时间复杂度为:n*n。

用C语言编写一个字符串排序函数,从小到大排序。 要求:1. 函数要有返回值,参数必须是指针类型的。 2. 本

/*

排序前:

One-1 Two-2 Three-3 Four-4 Five-5 Six-6 Seven-7 Eight-8 Nine-9 Ten-10

排序后:

Two-2 Three-3 Ten-10 Six-6 Seven-7 One-1 Nine-9 Four-4 Five-5 Eight-8

Press any key to continue

*/

#include stdio.h

#include string.h

void sort(char *a[],int n) { // 选择排序

char *temp;

int i,j,k;

for(i = 0;i n - 1;i++) {

k = i;

for(j = i + 1;j n;j++)

if(strcmp(a[k],a[j]) 0) k = j;

if(k != i) { // 交换的是字符串的地址,不是字符串的内容

temp = a[i];

a[i] = a[k];

a[k] = temp;

}

}

}

int main() {

int i,n = 10;

char *s[] = {"One-1","Two-2","Three-3","Four-4","Five-5","Six-6","Seven-7","Eight-8","Nine-9","Ten-10"};

printf("排序前:\n");

for(i = 0;i n;i++) printf("%s ",s[i]);

printf("\n\n");

sort(s,n);

printf("排序后:\n");

for(i = 0;i n;i++) printf("%s ",s[i]);

printf("\n\n");

return 0;

}

c语言简单编程,编一个用选择法对N个字符进行排序的函数,从A到Z排序。

#define N 26

#include stdio.h

void fun(char str[]);

int main(){

int i,j;

char str[N];

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

scanf("%c",str[i]);

fun(str);

for (i=0;iN;i++)//输出也要加循环

printf("%c ",str[i]);

}

void fun(char str[]){

char min;

int i,j,mark;

for(i=0;iN;i++) {

min=str[i];

mark=i;

for(j=i;jN;j++)

if (minstr[j]){

min = str[j];

mark=j;

min=str[i];

str[i]=str[mark];

str[mark]=min;

}

}

那个函数就是fun()函数。。。


当前文章:用c语言写一个排序函数 c语言中排序函数的用法
分享链接:http://pwwzsj.com/article/hjpgpg.html