选择,冒泡排序

来源:互联网 发布:react 引用js 编辑:程序博客网 时间:2024/05/29 09:02
/**需求:对于给定的一组数据进行降序排序 数据来源:随机数 算法:冒泡法,选择法…… 稳定性: 复杂度:*/#include <stdio.h>#include <stdlib.h>#include <time.h>#define N 10//是元素个数,而不是数组下标最大值,也就是说,最大是a[N-1],没有a[N]!int main(){int a[N];int n;int random(int [],int);int select(int [],int);int bubble(int [],int);random(a,N);printf("对此随机数序列进行降序排序:\n");for(int j=0;j<N;j++)printf("%4d",a[j]);printf("\n-----------------------------\n");printf("|--1 选择排序\n");printf("|--2 冒泡排序\n");printf("选择您要执行的排序算法序号\n");scanf("%d",&n);switch(n){//注意加中括号case 1:select(a,N);break;case 2:bubble(a,N);break;default:return -1;}printf("\n");printf("啦啦啦");return 0;}int random(int a[],int n){//生成伪随机数_srand(time(0));for(int i=0;i<n;i++)a[i]=rand()%100;return 0;}int select(int a[],int n){//复杂度:T(n)=(n-1)(n-2+1)/2=(n-1)^2/2=O(n^2)//算法概述:共经历n-1趟,每趟n-i-2次交换,本轮头一个元素跟后面所有元素比较,头一个元素实时变化,//稳定性:int swap(int&,int&);int tmp=0;//用于交换的临时变量for(int i=0;i<n-1;i++){for(int j=i+1;j<n;j++)//j最大取n-1,i最大取n-2{//第I轮把最大的放在最前if(a[j]>a[i]){/*tmp=a[i];a[i]=a[j];a[j]=tmp;*/swap(a[i],a[j]);}}}printf("\n");printf("选择排序后:\n");for(int k=0;k<N;k++)printf("%4d",a[k]);printf("\n");return 0;}int bubble(int a[],int n)//再次提醒!:n是元素个数,而不是最大下标!{//算法概述:共n-1趟,相邻两个交换,每趟交换次数比上一趟少1//复杂度:T(n)=(n-1)*(n-1+1)/2=n*(n-1)^2/2=O(n^2)//稳定性:int swap(int&,int&);int tmp=0;for(int i=0;i<n-1;i++)//轮数{for(int j=0;j<n-i-1;j++){//每趟交换次数比第一次少(i+1)次,比如3个数,第一次交换2次就行了if(a[j+1]>a[j]){//使相邻的两元素,左边的比右边的大/*tmp=a[j];a[j]=a[j+1];a[j+1]=tmp;*/swap(a[j],a[j+1]);}}}printf("冒泡排序后:\n");for(int k=0;k<n;k++)printf(" %d ",a[k]);printf("\n");return 0;}int swap(int &a,int &b){int tmp;tmp=a;a=b;b=tmp;return 0;}

如题
0 0