1. 编写冒泡排序和选择排序的程序,主函数中编写菜单调用排序函数。C语言

1. 编写冒泡排序和选择排序的程序,主函数中编写菜单调用排序函数。C语言,第1张

//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()执行、编写一个函数,实现将一组数据进行排序 并在程序中调用该函数,并将排序结果输出等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9765357.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存