今天给各位分享c语言直接法排序的知识,其中也会对c语言排序的几种方法进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
1、C语言直接插入法排序 请帮我分析2、c语言排序方法有哪几种3、c语言直接交换法对十个整数进行排序4、C语言排序有哪些方法 详细点5、c语言三种排序6、c语言数据结构直接插入排序法
C语言直接插入法排序 请帮我分析
/*
note:your
choice
is
c
ide
*/
#include
“stdio.h”
void
main()
{
int
i,j,r[20],n;
scanf(“%d”,n);
for(i=1;i=n;i++)//为什么i=1
而不是0
{0位置放哨兵单元,1…n放待排序的整数}
scanf(“%d”,r[i]);
for(i=2;i=n;i++)//为什么i=2
而不是0
/*{插入排序,如对第k个数xk排放,(注意此时:前k-1个数已经排好序了)
它是在1-k这k个位置中给xk找到合适的位置,从k-1的位置开始比较,依次向前(k-2,k-3,…)
直到找到合适的位置。当i=1是只有一个数,可看做是排好序的,所以从2开始}*/
{
r[0]=r[i];
//r[0]用作哨兵单元
/*{哨兵单元的作用是避免每次下标(数组索引)减少后,就判断下标是否合法(非负数).
没有哨兵j–;后要有
if(j0)
break;
否则出现数组访问越界}*/
j=i-1;
while(r[0]
评论
加载更多
c语言排序方法有哪几种
C,语言常用的排序方法有很多种。比如说冒泡排序,直接交换排序,直接选择排序,直接插入排序,二分插入排序,快速排序,归并排序,二叉排序树排序,小学生排序,等等。
c语言直接交换法对十个整数进行排序
int main()
{
int a[10];
int i,j,t;
for(i = 0; i 10; i ++)
scanf(“%d”,a+i);
for(i = 0; i 9; i ++)
for(j = i + 1; j 10; j ++)
{
if(a[i]a[j])
{
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
for(i = 0; i 10; i ++)
printf(“%d “,a[i]);
}
C语言排序有哪些方法 详细点
排序方法吗应该和语言没有太紧密的关系,关键看数据类型和结构,一般常用的排序方法有:
1 插入排序——细分的话还可有(1)直接插入排序(2)折半插入排序(3)希尔排序(4)2-路插入排序(5)表插入排序 等
2 比较排序——如冒泡排序,快速排序 等
3 选择排序——如简单选择排序,树形选择排序,堆排序 等
4 归并排序——简单的如 2-路归并排序 等
5 基数排序
等等
一般情况下,如果数据不大,只是简单的自己练习或简单的几个十几个或几十个数据的话,效率分不出多少来,常用冒泡,直接插入,简单选择这几种简单的时间复杂度为O(n2)的排序方法就可以。这里举一个简单的小例子——比较排序中的——冒泡排序 如下:
//其中a[]是用于排序的数组变量的首地址,也即数组名,a[0]不放数据,
//用于交换时的辅助存储空间,数据从a[1]开始存放,n表示存放的数据个数
void bubble_sort(int a[], int n){
int i = 0, j = 0, change = 0;//change用于记录当前次比较是否进行了交换
for(i = n – 1, change = 1; i = 1 change; i–){//如果change是0,即已经排好序不用再进行比较了
change = 0;//将当前次的change赋值为0,记录不交换即下次不用比较了
for(j = 1; j = i; j++){//内循环依次将相邻的两个记录进行比较
if(a[j] a[j+1]){//小的前移,最大的移动到本次的最后一项去
a[0] = a[j+1];
a[j+1] = a[j];
a[j] = a[0];
change = 1;//进行了交换的标记
}
}
}
}
c语言三种排序
常用的c语言排序算法主要有三种即冒泡法排序、选择法排序、插入法排序。
一、冒泡排序冒泡排序:
是从第一个数开始,依次往后比较,在满足判断条件下进行交换。代码实现(以降序排序为例)
#includestdio.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;}}
二、选择排序以升序排序为例:
就是在指定下标的数组元素往后(指定下标的元素往往是从第一个元素开始,然后依次往后),找出除指定下标元素外的值与指定元素进行对比,满足条件就进行交换。与冒泡排序的区别可以理解为冒泡排序是相邻的两个值对比,而选择排序是遍历数组,找出数组元素与指定的数组元素进行对比。(以升序为例)
#includestdio.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;i10: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; j0; j–)
{
if(arr[j] arr[j-1])
{
temp = arr[j];
arr[j]=arr[j-1];
arr[j-1]=temp;
}
}
}
c语言数据结构直接插入排序法
你最后的那个printf中少写了个%d,你仔细看看,你就输出了3个变量。
而且,你的数据是从数组的第二个元素(下标1)开始存放的,那你在计算排名的时候,怎么是让i=1,再让i与i-1比较呢,应该是i与i+1比较才对啊。
#include stdio.h
#define Maxsize 100
typedef struct student
{
char num[12];
char name[8];
int score;
int rank; //名次
}Elemtype;
typedef struct sqlist
{
Elemtype data[Maxsize];
int length;
}list;
void main()
{
list s;
int i,j;
printf(“请输入人数:”);
scanf(“%d”,s.length);
//———————
for(i=1;i=s.length;i++)
{
printf(“请输入第%d个学生的学号:”, i);
scanf(“%s”,s.data[i].num);
printf(“请输入第%d个学生的姓名:”, i);
scanf(“%s”,s.data[i].name);
printf(“请输入第%d个学生的分数:”, i);
scanf(“%d”,s.data[i].score);
}
//———————————–
printf(“学号\t姓名\t分数\t\n”);
for(i=1;i=s.length;i++)
{
printf(“%s\t%s\t%d\t\n”,s.data[i].num,s.data[i].name,s.data[i].score);
}
//—————开始排序了————–
for(i=2;i=s.length;i++)
{
s.data[0]=s.data[i];
for(j=i-1;s.data[0].scores.data[j].score;j–)
{
s.data[j+1]=s.data[j];
}
s.data[j+1]=s.data[0];
}
//————-输出排序后的结果————–
printf(“—————————-\n”);
printf(“学号\t姓名\t分数\t\n”);
for(i=1;i=s.length;i++)
{
printf(“%s\t%s\t%d\t\n”,s.data[i].num,s.data[i].name,s.data[i].score);
}
s.data[1].rank=1;
for(i=2;i=s.length;i++)
{
if(s.data[i].score==s.data[i+1].score)
s.data[i+1].rank=s.data[i].rank;
else
s.data[i].rank=i;
}
printf(“——-排名后———-\n”);
printf(“学号\t姓名\t分数\t名次\t\n”);
for(i=1;i=s.length;i++)
{
printf(“%s\t%s\t%d\t%d\n”,s.data[i].num,s.data[i].name,s.data[i].score,s.data[i].rank);
}
}
这是该国的,可正确运行。
c语言直接法排序的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c语言排序的几种方法、c语言直接法排序的信息别忘了在本站进行查找喔。