冒泡法:假设有n个数,在每趟中通过在前 n-i+1 项( i 为当前趟数)对比相邻数n-1次将最大数沉底(即放到最后),n-1趟结束后即可得到排列好的数列。
代码如下:
//冒泡法排列10个数 #include<stdio.h> #define SIZE 10 void rank(int *num){ int temp; for(int i=0;i<SIZE-1;i++){ for(int j=0;j<SIZE-i;j++){ if(*(num+j)>*(num+j+1)){ temp=*(num+j); *(num+j)=*(num+j+1); *(num+j+1)=temp; } } } } int main(){ int a[SIZE]={0}; puts("请输入10个数:"); for(int i=0;i<SIZE;i++) scanf("%d",&a[i]); rank(a); for(int i=0;i<SIZE;i++) printf("%d ",a[i]); printf("\n"); return 0; }
选择法:假设有n个数,每趟中找出前 n-i+1 项( i 为当前趟数)中最小数并与第 i 个数交换,n-1趟结束后即可得到排列好的数列。
代码如下:
#include<stdio.h> #define SIZE 10 void rank(int *num){ int temp,*min; for(int i=0;i<SIZE-1;i++){ min=num+i; for(int j=i+1;j<SIZE;j++){ if(*min>*(num+j)) min=num+j; } temp=*min; *min=*(num+i); *(num+i)=temp; } } int main(){ int a[SIZE]={0}; puts("请输入10个数:"); for(int i=0;i<SIZE;i++) scanf("%d",&a[i]); rank(a); for(int i=0;i<SIZE;i++) printf("%d ",a[i]); printf("\n"); return 0; }
原文:https://www.cnblogs.com/adesoe/p/12839938.html