扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
#include stdlib.h
创新互联建站是一家集网站建设,青云谱企业网站建设,青云谱品牌网站建设,网站定制,青云谱网站建设报价,网络营销,网络优化,青云谱网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
#include stdio.h
#define MAXN 8
#define MOD 1024
void QuickSort(int *arr, int low, int high)
{
if (low = high) return;
//保存排序区间的 起始位置和终点位置
int left = low, right = high;
//默认 左边第一个元素 为标志
int key = arr[low];
while (low high)
{
while (low high arr[high] = key) --high;
arr[low] = arr[high];
while (low high arr[low] = key) ++low;
arr[high] = arr[low];
}
arr[low] = key;
//每次排序后都分成两部分[left, low) (low, right]
//arr[low]的位置是一定是有序的
QuickSort(arr, left, low - 1);
QuickSort(arr, low + 1, right);
return;
}
int main(void)
{
int n;
scanf("%d", n);
int arr[MAXN] = {0};
int i;
for (i = 0; i n; ++i)
scanf("%d", arr[i]);
//输入是默认为生活中习惯的数组左边第一个为:编号1
int s, m;
scanf("%d %d", s, m);
//转成计算机数组第一个为:编号0
s--; m--;
//快排
QuickSort(arr, s, m);
//输出
for (i = s; i = m; ++i)
{
printf("%d ", arr[i]);
}
return 0;
}
//测试数据
//8
//1 2 3 4 5 6 7 8
//2 6
输出 6 5 4 3 2
声明一个字符串指针数组存放每个字符串的首地址,调用库函数qusort按题目要求对字符串指针排序,不移动源字符串。关键是要设计一个好的比较函数,精巧地解决“按长度、长度相等时按大小”排序的问题。举例代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//#include "stdafx.h"//If the a href=";tn=44039180_cprfenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y3njb3nhNWuWubrH-bmH-h0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3En1czrjDLn10v" target="_blank" class="baidu-highlight"vc++6.0/a, with this line.
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#define N 10 //字符串个数
#define LN 21 //限制字符串长度为20
int mycmp(const void *a,const void *b){//比较函数
char *pa=*(char **)a,*pb=*(char **)b;
int x=int(strlen(pa)-strlen(pb));//依长度比较
return x ? x : strcmp(pa,pb);//长度相等时依大小比较
}
int main(void){
int i=0,j=0;
char *f[N],w[LN*N];//声明a href=";tn=44039180_cprfenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y3njb3nhNWuWubrH-bmH-h0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3En1czrjDLn10v" target="_blank" class="baidu-highlight"指针数组/af和字符串总空间
printf("Input %d string(s)(length=%d)...\n",N,LN);
while(iN){//输入并将字符串首址赋给f[i]
if(scanf(" %[1234567890]",f[i]=w+j)0 strlen(f[i])LN)
i++,j+=LN;
else printf("Error, redo: Required length less than %d:",LN);
}
qsort(f,N,sizeof(char *),mycmp);//调用a href=";tn=44039180_cprfenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y3njb3nhNWuWubrH-bmH-h0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3En1czrjDLn10v" target="_blank" class="baidu-highlight"库函数/a对字符串指针排序
for(i=0;iN;printf("%s\n",f[i++]));//输出...
return 0;
}
你可以看看这个例子:
#include stdio.h
#include stdlib.h
int list[5] = {7,5,9,2,6};
int sort_function( const void *a, const void *b);
int main(void)
{
int x;
qsort((void *)list, 5, sizeof(int), sort_function);
for (x = 0; x 5; x++)
printf("%d\\n", list[x]);
return 0;
}
int sort_function( const void *a, const void *b)
{
if(*(int*)a*(int*)b)
return 1;
else if(*(int*)a*(int*)b)
return -1;
else
return 0;
}
1、冒泡排序(最常用)
冒泡排序是最简单的排序方法:原理是:从左到右,相邻元素进行比较。每次比较一轮,就会找到序列中最大的一个或最小的一个。这个数就会从序列的最右边冒出来。(注意每一轮都是从a[0]开始比较的)
以从小到大排序为例,第一轮比较后,所有数中最大的那个数就会浮到最右边;第二轮比较后,所有数中第二大的那个数就会浮到倒数第二个位置……就这样一轮一轮地比较,最后实现从小到大排序。
2、鸡尾酒排序
鸡尾酒排序又称双向冒泡排序、鸡尾酒搅拌排序、搅拌排序、涟漪排序、来回排序或快乐小时排序, 是冒泡排序的一种变形。该算法与冒泡排序的不同处在于排序时是以双向在序列中进行排序。
原理:数组中的数字本是无规律的排放,先找到最小的数字,把他放到第一位,然后找到最大的数字放到最后一位。然后再找到第二小的数字放到第二位,再找到第二大的数字放到倒数第二位。以此类推,直到完成排序。
3、选择排序
思路是设有10个元素a[1]-a[10],将a[1]与a[2]-a[10]比较,若a[1]比a[2]-a[10]都小,则不进行交换。若a[2]-a[10]中有一个以上比a[1]小,则将其中最大的一个与a[1]交换,此时a[1]就存放了10个数中最小的一个。同理,第二轮拿a[2]与a[3]-a[10]比较,a[2]存放a[2]-a[10]中最小的数,以此类推。
4、插入排序
插入排序是在一个已经有序的小序列的基础上,一次插入一个元素*
一般来说,插入排序都采用in-place在数组上实现。
具体算法描述如下:
⒈ 从第一个元素开始,该元素可以认为已经被排序
⒉ 取出下一个元素,在已经排序的元素序列中从后向前扫描
⒊ 如果该元素(已排序)大于新元素,将该元素移到下一位置
⒋ 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
⒌ 将新元素插入到下一位置中
⒍ 重复步骤2~5
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流