1. 冒泡排序:
冒泡排序是一种极其简单的排序算法,也是我所学的第一个排序算法。它重复地走访过要排序的元素,依次比较相邻两个元素,如果他们的顺序错误就把他们调换过来,直到没有元素再需要交换,排序完成。这个算法的名字由来是因为越小(或越大)的元素会经由交换慢慢“浮”到数列的顶端。
冒泡排序算法的运作如下:
- 比较相邻的元素,如果前一个比后一个大,就把它们两个调换位置。
- 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
- 针对所有的元素重复以上的步骤,除了最后一个。
- 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
C++代码为:
#include <iostream>
using namespace std;
int main()
{
int arr[10]={7,6,9,2,8,1,3,10,5,0};
int n=10;
for(int k=0;k<n;k++)
{
for(int j=0;j<n-k-1;j++)
{
if(arr[j+1]<arr[j])
{
int temp=arr[j+1];
arr[j+1]=arr[j];
arr[j]=temp;
}
}
cout<<"第"<<k<<"轮输出为:"<<endl;
for(int i=0;i<n;i++)
{
cout<<arr[i]<<' ';
}
cout<<endl;
}
for(int i=0;i<n;i++)
{
cout<<arr[i]<<' ';
}
cout<<endl;
return 0;
}
程序执行结果为:
第0轮输出为:
6 7 2 8 1 3 9 5 0 10
第1轮输出为:
6 2 7 1 3 8 5 0 9 10
第2轮输出为:
2 6 1 3 7 5 0 8 9 10
第3轮输出为:
2 1 3 6 5 0 7 8 9 10
第4轮输出为:
1 2 3 5 0 6 7 8 9 10
第5轮输出为:
1 2 3 0 5 6 7 8 9 10
第6轮输出为:
1 2 0 3 5 6 7 8 9 10
第7轮输出为:
1 0 2 3 5 6 7 8 9 10
第8轮输出为:
0 1 2 3 5 6 7 8 9 10
第9轮输出为:
0 1 2 3 5 6 7 8 9 10
最后输出:
0 1 2 3 5 6 7 8 9 10
2. 选择排序:
选择排序也是一种简单直观的排序算法。它的工作原理很容易理解:初始时在序列中找到最小(大)元素,放到序列的起始位置作为已排序序列;然后,再从剩余未排序元素中继续寻找最小(大)元素,放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
注意选择排序与冒泡排序的区别:冒泡排序通过依次交换相邻两个顺序不合法的元素位置,从而将当前最小(大)元素放到合适的位置;而选择排序每遍历一次都记住了当前最小(大)元素的位置,最后仅需一次交换操作即可将其放到合适的位置。
C++代码如下:
#include <iostream>
using namespace std;
int main()
{
int arr[]={8,5,2,6,9,3,1,4,0,7};
int n=sizeof(arr) / sizeof(int);
for(int k=0;k<n-1;k++)
{
int maxx=k;
for(int i=k+1;i<n;i++)
{
if(arr[i]>arr[maxx])
{
maxx=i;
}
}
if(maxx!=k)
{
int temp=arr[maxx];
arr[maxx]=arr[k];
arr[k]=temp;
}
cout<<"第"<<k+1<<"轮输出为:"<<endl;
for(int i=0;i<n;i++)
{
cout<<arr[i]<<' ';
}
cout<<endl;
}
return 0;
}
第1轮输出为:
9 5 2 6 8 3 1 4 0 7
第2轮输出为:
9 8 2 6 5 3 1 4 0 7
第3轮输出为:
9 8 7 6 5 3 1 4 0 2
第4轮输出为:
9 8 7 6 5 3 1 4 0 2
第5轮输出为:
9 8 7 6 5 3 1 4 0 2
第6轮输出为:
9 8 7 6 5 4 1 3 0 2
第7轮输出为:
9 8 7 6 5 4 3 1 0 2
第8轮输出为:
9 8 7 6 5 4 3 2 0 1
第9轮输出为:
9 8 7 6 5 4 3 2 1 0