排序算法是编程学习的基础,而 冒泡排序 选择排序 插入排序 对于小型数组效率高,但是对于大型的数据效率就比较差了。
1.冒泡排序
顾名思义,冒泡排序就是将满足条件的数据从前向后平移。
例如定义数组 a[]={9,4,7,5,8,6,2,3,1};
伪代码:
1.将数组第一个与第二个比较,若比后面的大,交换。
2.对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。(这是一趟重复)
3.针对所有的元素重复以上的步骤,除了最后一个。
代码演示:
void bubble(int a[], int n) //每趟的代码
{
int i;
for(i=0; i<n; i++)
{
if(a[i]>a[i+1]) //后面的比前面的大,就交换
{
int temp=a[i]; //经典交换方法
a[i] = a[i+1];
a[i+1] = temp;
}
}
}
下面重复每趟
void bubble_sort(int a[], int n)
{
int i;
for(i=n; i>0; i--)
{
bubble(a , i);
}
}
2.选择排序
选择排序:先选择,后排序。
以从小到大排序为例,建立数组每次找到数组最大的然后与最后一个交换,接下来选择数组第二大的排在第二位。
代码演示
选择:
int select(int a[],int n) //每次选择数组n个之前的最大的数字,并返回这个数字的位置
{
int max=0;
int pos=0;
for(int i=0; i<n; i++)
{
if(max<a[i])
{
max=a[i];
pos=i;
}
}
return pos;
}
排序:
void selectsort(int a[], int n)
{
int i = n; //从最后一个开始选择
while(i>0)
{
int pos=select(a,i);
int temp = a[pos];
a[pos]=a[i-1];
a[i-1] = temp;
i--; //每次减一,继续选择之前的数
}
}
3.插入排序
也是以从小到大排序为例,从后往前找寻数组中比他小的数,并将比他大的数向后排序,将其插入在比他小的位置后面。
插入
void insert(int a[], int n){
int i=n;
int key=a[n];
while(a[i-1]>key)
{
a[i]=a[i-1];
i--;
if(i == 0)
break;
}
a[i]=key;
}
重复以上步骤:
void insertsort(int a[], int n)
{
for(int i=1; i<n; i++)
{
insert(a , i);
}
}
一下是全部c++代码并写了测试函数:
#include <iostream>
using namespace std;
void bubble(int a[], int n)
{
int i;
for(i=0; i<n; i++)
{
if(a[i]>a[i+1])
{
int temp=a[i];
a[i] = a[i+1];
a[i+1] = temp;
}
}
}
void bubble_sort(int a[], int n)
{
int i;
for(i=n; i>0; i--)
{
bubble(a , i);
}
}
int select(int a[],int n)
{
int max=0;
int pos=0;
for(int i=0; i<n; i++)
{
if(max<a[i])
{
max=a[i];
pos=i;
}
}
return pos;
}
void selectsort(int a[], int n)
{
int i = n;
while(i>0)
{
int pos=select(a,i);
int temp = a[pos];
a[pos]=a[i-1];
a[i-1] = temp;
i--;
}
}
void insert(int a[], int n){
int i=n;
int key=a[n];
while(a[i-1]>key)
{
a[i]=a[i-1];
i--;
if(i == 0)
break;
}
a[i]=key;
}
void insertsort(int a[], int n)
{
for(int i=1; i<n; i++)
{
insert(a , i);
}
}
int main()
{
int a1[]={9,6,5,7,4,1,2,3,8};
int a2[]={9,6,5,7,4,1,2,3,8};
int a3[]={9,6,5,7,4,1,2,3,8};
cout<<"未经过排序的数组:";
for(int i=0; i<9; i++)
cout<<a1[i]<< " ";
cout<<endl;
bubble_sort(a1,9);
cout<<"冒泡排序法:";
for(int i=0; i<9; i++)
cout<<a1[i]<< " ";
cout<<endl;
selectsort(a2,9);
cout<<"选择排序法:";
for(int i=0; i<9; i++)
cout<<a2[i]<< " ";
cout<<endl;
insertsort(a3,9);
cout<<"插入排序法:";
for(int i=0; i<9; i++)
cout<<a3[i]<< " ";
cout<<endl;
return 0;
}