当前位置:首页 » 编程语言 » c语言排序
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言排序

发布时间: 2022-01-21 06:41:18

1. c语言中排序的方法有哪些

排序算法和语言没有什么关系,一般来说面试,考试就是那些
快速排序
冒泡排序
堆排序

2. c语言三种排序

常用的c语言排序算法主要有三种即冒泡法排序、选择法排序、插入法排序

一、冒泡排序冒泡排序:

是从第一个数开始,依次往后比较,在满足判断条件下进行交换。代码实现(以降序排序为例)

#include<stdio.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;}}

二、选择排序以升序排序为例:

就是在指定下标的数组元素往后(指定下标的元素往往是从第一个元素开始,然后依次往后),找出除指定下标元素外的值与指定元素进行对比,满足条件就进行交换。与冒泡排序的区别可以理解为冒泡排序是相邻的两个值对比,而选择排序是遍历数组,找出数组元素与指定的数组元素进行对比。(以升序为例)

#include<stdio.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;i<10: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; j>0; j--)

{

if(arr[j] <arr[j-1])

{

temp = arr[j];

arr[j]=arr[j-1];

arr[j-1]=temp;

}

}

}

3. c语言编程排序问题

注释加上了,看看行不行
#include
<iostream>
#include
<fstream>
#include
<algorithm>
#include
<time.h>
using
namespace
std;
int
ran(int
n)
//随机函数,输出是1~n的随机整数
{
return
rand()%n+1;
}
/*c/c++语言中,生成随机数要先生成种子,这点如果你不明白不要紧,日后一定会明白的
我大一的时候听说之后也不明白*/
int
main()
{
int
num[200],i,n=200;
ofstream
Aout("a.dat"),Bout("b.dat");
//两个文件流,就是对两个文件进行写操作的对象
//其中ofstream代表output,file,stream
srand((unsigned)time(NULL));
//生成随机数的种子
cout<<"before
sort:"<<endl;
for(i=0;i<n;i++)
//这个for循环,生成n个随机数(n=200,可以自己改n的值)
{
//cout是向控制台输出,Aout是向a.dat输出
num[i]
=
ran(1000);
cout<<num[i]<<"
";
Aout<<num[i]<<"
";
if((i+1)%10
==
0)
//这个的意思是每十个数一行,endl相当于换行
{
cout<<endl;
Aout<<endl;
}
}
cout<<endl;
sort(num,num+n);
//对这些数排序,快速排序方法,在algorithm头文件中,O(nlogn)复杂度
cout<<"after
sort:"<<endl;
for(i=0;i<n;i++)
//输出这些排序之后的数据,其中cout是向控制台输出,Bout就是往b.dat输出
{
//这个for循环是和上面的形式一样的
cout<<num[i]<<"
";
Bout<<num[i]<<"
";
if((i+1)%10
==
0)
{
cout<<endl;
Bout<<endl;
}
}
cout<<endl;
return
0;
}

4. C语言 排序

#include <iostream>
using namespace std;
void sort(char* num,int size)
{
int total[10] = {0};
for(int i = 0; i < size; i++)
{
total[num[i]-'0']++;//对应的数字个数增加
}
int max = -1;
int maxId = 0;
cout<<endl;
for(int i = 0; i < 10; i++)
{
for(int j = 0; j < 10; j++)
{
if(max < total[j])
{
max = total[j];
maxId = j;
}
}
for(int k = 0; k < max; k++)
{
cout<<maxId;
}
total[maxId] = -1;
max = -1;
}
cout<<endl;
}

void main()
{
char a[100];
cin>>a;
sort(a,15);
system("pause");
}

5. c语言中排序方法

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

6. c语言简单排序

//希望我的回答对你的学习有帮助
//第一题
#include<stdio.h>
voidmain()
{
inti,j,t1,t2;
inta[10],b[10];
for(i=0,j=1;i<10;i++,j++)
{
scanf("%d",&a[i]);
b[i]=j;
}
for(intk=0;k<10;k++)
for(intl=k+1;l<=9;l++)
{
if(a[k]>a[l])
{
t1=a[l];a[l]=a[k];a[k]=t1;
t2=b[l];b[l]=b[k];b[k]=t2;
}
}
for(i=0;i<10;i++)
{
printf("%d",a[i]);
if(i<9)
printf("");
}
printf(" ");
for(i=0;i<10;i++)
{
printf("%d",b[i]);
if(i<9)printf("");
}
printf(" ");
}

7. C语言选择法排序

#include<stdio.h>

#defineM 5

void main()

{

int b[M],i,j,t,k;

for(i=0;i<M;i++)

scanf("%d",&b[i]);

for(i=0;i<M-1;i++)

{

for(k=i,j=i+1;j<M;j++)

if(b[k]<b[j])

k=j;

if(i!=k)

{

t=b[i];

b[i]=b[k];

b[k]=t;

}

}

for(i=0;i<M;i++)

printf("%d ",b[i]);

}

错在大括号位置加错了。

代码:

#include<stdio.h>

void SelectionSort(int *num,int n)

{

int i = 0;

int min = 0;

int j = 0;

int tmp = 0;

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

{

min = i;//每次讲min置成无序组起始位置元素下标

for(j = i;j < n;j++)//遍历无序组,找到最小元素。

{

if(num[min]>num[j])

{

min = j;

}

}

if(min != i)//如果最小元素不是无序组起始位置元素,则与起始元素交换位置

{

tmp = num[min];

num[min] = num[i];

num[i] = tmp;

}

}

}

(此处空一行)

int main()

{

int num[6] = {5,4,3,2,9,1};

int i = 0;

SelectionSort(num,6);//这里需要将数列元素个数传入。有心者可用sizeof在函数内求得元素个数。

for(i = 0;i < 6;i++)

{

printf("%d ",num[i]);

}

return 0;

}

8. C语言排序

关于你说的不确定数组问题,你可以这样做:
int n, * p, i ;scanf("%d",&n); /* 输入要对几个数进行排序 */
p=(int *)malloc(sizeof(int)*n) ; /* 分配一个大小为 n 的整数动态数组 */
然后往 p 中存数即可。

9. C语言数组排序方法

选择排序的原理是,每次从待排序数字中挑选出最大(最小)数字,放在有序序列的末尾。实际操作中,只需要在这个数组中将挑出来的数字与前面的数字交换即可。例如:4
1 5
2 3找到最小的1,1和4交换1
4 5
2
3找到最小的2,2和4交换1
2
5
4
3找到最小的3,3和5交换1
2
3
4
5找到最小的4,4和4交换(不交换也可)可见,选择排序需要一个双重循环来完成,因此它的复杂度是O(n^2)在数据量比较大时,不建议使用这种排序方法。 其他排序方法有很多,你甚至可以自己根据不同数据规模设计不同的排序方法。比较常见的有冒泡排序,插入排序(这两种和选择排序一样,都是O(n^2)),二分法插入排序(降低了一些复杂度,但是涉及到大规模数据移动,效率依然不高),快速排序(平均复杂度O(nlogn),但是不稳定,最坏情况O(n^2)),随机化快速排序(很大程度上避免了最坏情况的出现),堆排序(O(nlogn),编程复杂度高),基数排序(理论复杂度O(n),实际要比这个慢。甚至能应付字符串排序,但是编程复杂度高,牵扯到其他数据结构),桶排序(O(n),编程简单,效率高,但是应付的数据范围不能太大,受到内存大小的限制)。 平时比较常用的就是快速排序,程序简单,效率也可以接受。 这是我了解的一些东西,希望对你有帮助。