最近学习了三种基本排序包括选择排序(selection sort),冒泡排序(bubble sort)以及插入排序(insertion sort),基于C++的实现方式如下:
#include <iostream>//头文件
using namespace std;
void bubble_sort(int *a,int len);
void select_sort(int *a,int len);
void insert_sort(int *a,int len);//声明三个函数
int main()
{
int i,len; //i用于输出数组,len为数组长度
int li[] = {7,5,3,1,0,9,8,6,4,2}; //定义一个长度为10的数组
len = (int)sizeof(li)/sizeof(*li); //利用所占字节数除以指针大小获得长度
bubble_sort(li,len); //调用冒泡排序函数
for(i=0;i<len;i++)
cout<<li[i]<<endl; //输出结果
return 0;
}
void bubble_sort( int *a,int len)//冒泡排序
{
int i ,j,temp;
for(i=0;i<len-1;i++)//趟数
for(j=0;j<len-1-i;j++)//每趟需要进行比较的次数
{
if(a[j]>a[j+1])//改变>可以改变升降序
{
temp = a[j+1];
a[j+1] = a[j];
a[j] = temp;//将更小的值和更大的值进行调换
}
}
}
void select_sort(int *a, int len)//选择排序,一趟排序记录最小的元素,放到第一个位置,第二趟排序记录无序区最小的元素,放在第 //二个位置
{
int i,j,temp,b;
for(i=0;i<len-1;i++) //找到数组最小的元素
{
temp = i;
for(j=i+1;j<len;j++)
{
if(a[temp]>a[j])
temp = j;
}
b = a[i];
a[i] = a[temp]; //将第i个位置换成找到的最小数,进行调换
a[temp] = b;
}
}
void insert_sort(int* a, int len)//插入排序,初始时只有一张牌,相当于有序区,按顺序摸一张起来,然后插入到正确位置
{
int i,j,temp;
for(i=1;i<len;i++)//i是无序区
{
temp = a[i];
j = i-1;//j是有序区
while(a[j]>temp && j>=0)//当有序区最右边的数大于临时数(摸到的牌),并且此时最右边的数不越界,则进行挪动
{
a[j+1] = a[j];
j--;
}
a[j+1] = temp;//因为j--,所以j+1为待插入位置,插入摸到的牌temp
}
}