//C语言示例代码如下
#include <stdioh>
#define N 10
//冒泡排序(升序)
void bubble_sort(int a[],int n)
{
int i,j; //j表示趟数,i表示第j趟两两比较的次数
int tmp; //临时变量
for(i=0;i<n-1;i++)
for(j=0;j<n-1-i;j++)
{
if(a[j] > a[j+1])
{
tmp=a[j];
a[j]=a[j+1];
a[j+1]=tmp;
}
}
}
//选择排序算法,按从小到大顺序
void select_sort(int array,int n)
{
int i,j,k;
int tmp;
for(i=0;i<n-1;i++)
{
k=i; //开始一趟选择排序,假定第i个元素是后面n-i+1个未排序的元素中最小的元素
for(j=i+1;j<n;j++)
{
if(array[k] > array[j]) //如果发现比当前最小元素还小的元素,则更新记录最小元素的下标k
k=j;
}
//如果最小元素的下标不是后面n-i+1的未排序序列的第一个元素,则需要交换第i个元素和后面找到的最小元素的位置
if(k != i)
{
tmp=array[k];
array[k]=array[i];
array[i]=tmp;
}
}
}
int main()
{
int arr[N];
int i;
printf("输入数组元素: ");
for(i=0;i<N;i++)
scanf("%d",&arr[i]);
bubble_sort(arr,N); //调用冒泡排序函数
printf("输出排序后的数组元素: ");
for(i=0;i<N;i++)
printf("%d ",arr[i]);
printf("\n输入数组元素: ");
for(i=0;i<N;i++)
scanf("%d",&arr[i]);
select_sort(arr,N); //调用选择排序函数
printf("输出排序后的数组元素: ");
for(i=0;i<N;i++)
printf("%d ",arr[i]);
printf("\n");
return 0;
}
写了两段代码,第一个是用冒泡排序法做的,第二个是快速排序法
#include <iostream>
using namespace std;
//冒泡排序法
template<typename T>
void sort(T data, int n)
{
int i, j;
T hold;
for (i = 0; i < n - 1; i++)
{
for (j = 0; j < n -1; j++)
{
if (data[j] > data[j+1])
{
hold = data[j];
data[j] = data[j+1];
data[j+1] = hold;
}
}
}
}
int main()
{
int i;
int a[] = {3, 2, 1, 5, 8 ,7};
char b[] = {'b', 'c', 'a', 'p', 'g'};
double c[] = {12, 21, 11, 10};
sort(a, 6);
for (i = 0; i < 6; i++)
cout << a[i] << " ";
cout << endl;
sort(b, 5);
for (i = 0; i < 5; i++)
cout << b[i] << " ";
cout << endl;
sort(c, 4);
for (i = 0; i < 4; i++)
cout << c[i] << " ";
cout << endl;
return 0;
}
#include <iostream>
using namespace std;
//快速排序法
template<typename T>
void Quick_sort(T data_ptr, int left, int right)
{
int low(left), high(right);
T middle, temp;
middle = data_ptr[(rand()%(right - left + 1)) + left]; //随机产生一个大于等于left且小于等于right的数
do{
while ((data_ptr[low] < middle) && (low < right)) //左扫面找出大于middle的数
low++;
while ((data_ptr[high]) > middle && (high > left)) //右扫面找出小于middle的数
high--;
//数据交换
if (low <= high)
{
temp = data_ptr[low];
data_ptr[low] = data_ptr[high];
data_ptr[high] = temp;
low++;
high--;
}
}while(low <= high); //当下标交错时停止,结束一次排序
//当左边有部分值的时候(left<high),递归左边
if (left < high)
Quick_sort(data_ptr, left, high);
//当右边有部分值的时候(right > low),递归右边
if (right > low)
Quick_sort(data_ptr, low, right);
}
int main()
{
int i;
int a[] = {3, 2, 1, 5, 8 ,7};
char b[] = {'b', 'c', 'a', 'p', 'g'};
double c[] = {12, 21, 11, 10};
Quick_sort(a, 0, 5);
for (i = 0; i < 6; i++)
cout << a[i] << " ";
cout << endl;
Quick_sort(b, 0, 4);
for (i = 0; i < 5; i++)
cout << b[i] << " ";
cout << endl;
Quick_sort(c, 0, 3);
for (i = 0; i < 4; i++)
cout << c[i] << " ";
cout << endl;
return 0;
}
文件的顺序存储结构表示
#define n l00 //假设的文件长度,即待排序的记录数目
typedef int KeyType; //假设的关键字类型
typedef struct{ //记录类型
KeyType key; //关键字项
InfoType otherinfo;//其它数据项,类型InfoType依赖于具体应用而定义
}RecType;
typedef RecType SeqList[n+1];//SeqList为顺序表类型,表中第0个单元一般用作哨兵
冒泡
void BubbleSort(SeqList R)
{ //R(ln)是待排序的文件,采用自下向上扫描,对R做冒泡排序
int i,j;
Boolean exchange; //交换标志
for(i=1;i<n;i++){ //最多做n-1趟排序
exchange=FALSE; //本趟排序开始前,交换标志应为假
for(j=n-1;j>=i;j--) //对当前无序区R[in]自下向上扫描
if(R[j+1]key<R[j]key){//交换记录
R[0]=R[j+1]; //R[0]不是哨兵,仅做暂存单元
R[j+1]=R[j];
R[j]=R[0];
exchange=TRUE; //发生了交换,故将交换标志置为真
}
if(!exchange) //本趟排序未发生交换,提前终止算法
return;
} //endfor(外循环)
} //BubbleSort
快速选择
void SelectSort(SeqList R)
{
int i,j,k;
for(i=1;i<n;i++){//做第i趟排序(1≤i≤n-1)
k=i;
for(j=i+1;j<=n;j++) //在当前无序区R[in]中选key最小的记录R[k]
if(R[j]key<R[k]key)
k=j; //k记下目前找到的最小关键字所在的位置
if(k!=i){ //交换R[i]和R[k]
R[0]=R[i];R[i]=R[k];R[k]=R[0]; //R[0]作暂存单元
} //endif
} //endfor
} //SeleetSort
Sorts the elements in a range of elements in a one-dimensional SystemArray
using the SystemIComparable implementation of each element of the SystemArray
这个ArraySort();在net 的类库中有多重重载,你想要问答是什么呢?
ArraySort(G,new Program ());
这种写法应该是没有的。
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;i<5;i++)
printf("|%d|",TestData[i]);
int retData = SelectSort(TestData,5);
printf("排序之后的结果:\n");
for(i = 0;i<5;i++)
printf("|%d|",TestData[i]);
return 0;
}
4、简单选择排序中,需要移动的记录次数比较少,主要的时间消耗在对于数据的比较次数。基本上,在比较的时候,消耗的时间复杂度为:nn。
#include<stdioh>
void sort(float a, int n)
{
int i,j,tmp;
for(i=0; i<n-1; i++)
for(j=0; j<n-i-1; j++)
if(a[j]>a[j+1])
{
tmp = a[j];
a[j] = a[j+1];
a[j+1] = tmp;
}
}
void main()
{
float a[5];
int i;
printf("请输入五个数(逗号隔开):");
scanf("%f,%f,%f,%f,%f",&a[0],&a[1],&a[2],&a[3],&a[4]);
sort(a,5);
printf("排序后为:");
for(i=0; i<5; i++)
printf("%2f ",a[i]);
printf("\n");
}
或者三个数的。
void sort(int a, int b, int c)
{
int tmp;
if(a>b){
tmp = b;
b = a;
a = tmp;
}
if(a>c){
tmp = c;
c = a;
a = tmp;
}
if(b>c){
tmp = c;
c = b;
b = tmp;
}
return;
}
扩展资料:
C语言中没有预置的sort函数。如果在C语言中,遇到有调用sort函数,就是自定义的一个函数,功能一般用于排序。
一、可以编写自己的sort函数。
如下函数为将整型数组从小到大排序。void sort(int a, int l)//a为数组地址,l为数组长度。
{
int i, j;
int v; //排序主体
for(i = 0; i < l - 1; i ++)
for(j = i+1; j < l; j ++)
{
if(a[i] > a[j])//如前面的比后面的大,则交换。
{
v = a[i];
a[i] = a[j];
a[j] = v;
}
}
}
对于这样的自定义sort函数,可以按照定义的规范来调用。
二、C语言有自有的qsort函数。
功 能: 使用快速排序例程进行排序。头文件:stdlibh
原型:
void qsort(void base,int nelem,int width,int (fcmp)(const void ,const void ));
参数:
1、待排序数组首地址。
2、数组中待排序元素数量。
3、各元素的占用空间大小4 指向函数的指针,用于确定排序的顺序,这个函数必须要自己写比较函数,即使要排序的元素是int,float一类的C语言基础类型。
以上就是关于1. 编写冒泡排序和选择排序的程序,主函数中编写菜单调用排序函数。C语言全部的内容,包括:1. 编写冒泡排序和选择排序的程序,主函数中编写菜单调用排序函数。C语言、编一个C++程序 创建一个选择排序法的函数模板sort 并在main()执行、编写一个函数,实现将一组数据进行排序 并在程序中调用该函数,并将排序结果输出等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)