C++ 排序法之冒泡法和选择法 素数,递归调用,用星号(*)打印一个梯形

来源:互联网 发布:小黑屋写作软件免费版 编辑:程序博客网 时间:2024/06/03 13:52

冒泡法的思路

将相邻两个数比较,将小的调到前头,若有6个数(8,9,5,4,,2,0)。第一次比较第一个数和第二个数(8和9)的大小,如果第一个数大于第二个数,就把两个数位置交换,第二次将第二个数和第三个数(9和5)进行比较和交换 ,如此进行5次,得到8,5,4,2,0,9的顺序, 最大的数9 已经沉底。

然后进行第二轮比较,对余下的前面5个数按上方法比较,经过4次比较,得到次大的数8。在进行第三轮比较,对余下的前面四个数进行比较。不难看出,对6个数要比较5轮,才能使6个数按大小顺序排列好。由此推知,如果有n个数,则要进行(n-1)轮比较和交换。在第一轮中要进行(n-1)次两两比较,在第J轮中要进行(n-j)轮次两两比较。

今设n=10 

#include <iostream>

using namespace std;

int main ()

{

   int a [11];

 int i,j,t;

cout <<"input 10 numbers :"<<endl;

for(i=1;i<11;i++)

cin>>a[i] ;

cout<<endl;

     for( j=1; j<=9;j++)

         for (i=1;i<=10-j; i++)

           if(a[i]>a[i+1])

            { t=a[i] ;a[i]=a[i+1];a[i+1]=t;}

cout<<"the sorted numbers:"<<endl;

for (i=1;i<11;i++)

cout<<a[i]<<" "

cout<<endl;

return 0;

}

选择法 

设有10个元素a[1]~a[10],将a[1]与a[2]~a[10]比较,若a[1]比a[2]~a[10]都小,则不进行交换,即无任何操作。若a[2]~a[10]中有一个以上比a[1]小,则将其中最小的一个假设a[i]与a[1]交换,此时a[1]中存放的是10个中最小的数。第二轮将a[2]与a[3]~a[10] ,将剩下的9个数中最小者a[i]与a[2]对换,此时a[2]中存放的是10个中第2小的数。以此类推,共进行9轮比较,a[1]~a[10]就按照由小到大的顺序存放。

#include<iostream>

using namespace std;

int main()

{int i,j,min,temp,a[11];

cout<<"enter data:"<<endl;

for(i=1;i<=10;i++)

{cout<<"a["<<i<<"]=";

cin>>a[i];

}

cout<<endl<<"The original numbers:"<<endl;

for(i=1;i<=10;i++)

cout<<a[i]<<"  ";

cout<<endl;

               for(i=1;i<=9;i++)
                   {min=i;

                    for(j=i+1;j<=10;j++)

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

 min=j;

temp=a[i];

a[i]=a[min];

a[min]=temp;

}

cout<<endl<<"The sorted numbers :"<<endl;

for(i=1;i<=10;i++)

cout<<a[i]<<"  ";

cout<<endl;

return 0;

}


0 0
原创粉丝点击