怕自己忘记,简单写一写插入排序,选择排序,冒泡排序。
插入排序:
void insertsort(int data[],int n)
{
for (int i =1;i<n;++i)
{
int tmp=data[i];
for (int j = i;j>0;--j)
{
if(data[j]<data[j-1])
{
data[j]=data[j-1];
data[j-1]=tmp;
}
}
}
}
选择排序:
以前老师上课说过,选择排序你把它想象成两个人打擂台,赢得站着继续跟下一位打,选出最牛逼的那个。选择排序差不多。数组相邻两个数比较,比它小的就交换位置。
void SelectSort(int data[] ,int n)
{
for (int i=0;i<n-1;++i)
{
int min =i;
for(int j=i+1;j<n;++j)
{
if(data[j]<data[min])
{
min=j;
}
}
swap(data[i],data[min]);
}
}
冒泡排序:
想象成石头丢进池塘里冒上来的咕噜咕噜的泡泡,从数组的最后一个位置开始遍历。
void BubbleSort(int data[] ,int n)
{
for (int i=0;i<n-1;++i)
{
for (int j=n-1;j>i;--j)
{
if(data[j]<data[j-1])
{
swap(data[j],data[j-1]);
}
}
}
}
下面是完整的代码(附测试):
#include <stdio.h>
using namespace std;
void insertsort(int data[] ,int n);
void SelectSort(int data[] ,int n);
void BubbleSort(int data[] ,int n);
int main()
{
int n = 10;
int data[10] = {9,8,11,20,5,4,3,2,1,19};
// insertsort(data ,n);
// SelectSort(data,n);
BubbleSort(data,n);
for(int i=0;i<10;++i)
{
std::cout<<data[i]<<" ";
}
return 0;
}
void insertsort(int data[],int n)
{
for (int i =1;i<n;++i)
{
int tmp=data[i];
for (int j = i;j>0;--j)
{
if(data[j]<data[j-1])
{
data[j]=data[j-1];
data[j-1]=tmp;
}
}
}
}
void SelectSort(int data[] ,int n)
{
for (int i=0;i<n-1;++i)
{
int min =i;
for(int j=i+1;j<n;++j)
{
if(data[j]<data[min])
{
min=j;
}
}
swap(data[i],data[min]);
}
}
void BubbleSort(int data[] ,int n)
{
for (int i=0;i<n-1;++i)
{
for (int j=n-1;j>i;--j)
{
if(data[j]<data[j-1])
{
swap(data[j],data[j-1]);
}
}
}
}
参考资料是C++数据结构与算法(第4版)