C++ 简单选择排序和冒泡排序
一 简单选择排序: 排序过程: (1)首先通过n-1次比较,找出n个数中最小的,使它与第一个书交换——第一趟选择排序,这时候最小的元素就在第一个位置了。 (2)再通过n-2次比较,从剩余的n-1个数中找出次小的并与第二个数交换将它放在第二个元素位置——第二趟选择排序。 (3)重复上述过程,经过n-1次排序后,排序结束。 例如我们对{3,5,7,8,9,6,2,1,4}从小到大排序 第一趟:通过8次比较,找出最小的数1,让他与第一个元素交换,这时候1就调到了第一个元素位置。 这时候序列式{1,3,5,7,8,9,6,2,4} 第二趟:不对1进行比较,比较后面的7个数,将2调到了第二个元素位置。 重复以上操作,最后就实现了从小到大的排序。、 具体代码实现:
#include <iostream>
using namespace std;
int main()
{
int a[101];
int k,n;
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<=n-1;i++)
{
k=i;
for(int j=i+1;j<=n;j++)
if(a[k]>a[j])k=j;
if(k!=i)
{
int t;
t=a[i];
a[i]=a[k];
a[k]=t;
}
}
for(int i=1;i<=n;i++)
cout<<a[i]<<" ";
return 0;
}
运行结果 程序过程; 首先i=1的时候:5跟4比,4比5小,4和5交换位置,然后4跟3比,3比4小,交换位置,然后3跟2比。2比3小,交换位置,2跟1比,2比1大,交换位置,第一趟排序结束,得到1 5 4 3 2的顺序。 i=2的时候:5跟4比,4跟3比,3跟2比,结束后得到1 2 5 4 3的顺序。 重复以上过程最后i=4的时候 前面3个数是1 2 3 后面是5和4,5和4比,4比5小,交换位置,排序结束得到1 2 3 4 5. 二 冒泡排序 排序过程: (1)比较第一个数与第二个数,若为逆序a[0]>a[1],则交换;然后比较第二个数与第三个数;以此类推,直至第n-1个数和第n个数比较为止——第一趟冒泡排序,结果最大的数被安置在最后一个元素位置上。 (2)对前n-1个数进行第二趟排序,结果次大的数被安置在第n-1个元素位置。 (3)重复上述过程,共经过n-1趟冒泡排序后,排序结束。 例如: 设n=6,本例a[0]不用,只用a[1]~a[6],定义数组长度为7,即a[7]。 以上是形象的排序过程。 程序实现:
#include <iostream>
using namespace std;
int main()
{
int a[7];
for(int i=1;i<=6;i++)
cin>>a[i];
for(int i=1;i<=6-1;i++)
for(int j=1;j<=6-i;j++)
if(a[j]>a[j+1])
{ int t;
t=a[j];
a[j]=a[j+1];
运行结果: 程序过程 第一趟:6与8比,8比6大,不交换位置,然后8与4比;8比4大,交换位置,然后8与9比,8比9小,不交换位置,然后9与2比,交换位置,然后9与3比交换位置,最终最大的数9跑到了最后一个位置。 第二趟:上一趟排序后的顺序为6 4 8 2 3 9 因为9已经是在最后一个位置了 所以第二趟进行四次比较就行 最终将次大的数8移到倒数第二个位置。 重复以上操作,得到顺序2 3 4 6 8 9,排序结束。
