废话不多说,先来个笑话(声明笑话转载):
最近的国际局势就像这样,美帝喊:有种放学别走!
乌克兰大叫:老子喊人揍死你。欧盟嚷嚷道:下课就动手!!
普大帝冷冷的说:放学了啊,到底打不打我呀,不打我走了。
进入正题,学算法不可能不提排序,排序算法主要分为:简单算法和改进算法,前者主要有冒泡排序、简单选择排序和直接插入排序;后者主要有希尔排序(改进自直接插入排序)、堆排序(改进自简单选择排序)、归并排序(改进自堆排序)和快速排序(改进自冒泡排序)。
以下是鄙人用C++写的简单排序算法,各位看官请指正:
#include <iostream>
using namespace std;
const int maxSize = 10;//指定线性表初始长度
//先定义一个用于排序的顺序表结构
struct myList
{
int r[maxSize];
int length;
};
//交换线性表中两个数据值
void swap(myList *L, int i, int j)
{
int temp = L->r[i];
L->r[i] = L->r[j];
L->r[j] = temp;
}
//开始编写冒泡排序算法
void bubbleSort(myList *L)
{
int i(0),j(0);
bool flag = true;
for (i = 0; i < L->length && flag; i++)
{
flag = false;
for (j = (L->length - 2); j >= i; j--)
{
if (L->r[j] > L->r[j+1])
{
swap(L,j,j+1);
flag = true;
}
}
}
}
//开始编写简单选择排序
void simpleChooseSort(myList *L)
{
int i(0),j(0);
int min;
for ( i = 0; i < L->length; i++)
{
min = i;
for (j = i +1; j < L->length; j++)
{
if (L->r[j] < L->r[min])
{
min = j;
}
}
if (min != i)
{
swap(L,i,min);
}
}
}
//开始编写直接插入排序
void directInsertSort(myList *L)
{
int i(0),j(0);
for ( i = 0;i < (L->length - 1); i++)
{
if (L->r[i+1] < L->r[i])
{
int temp = L->r[i+1];
for (j = i; L->r[j] > temp; j--)
{
L->r[j+1] = L->r[j];
}
L->r[j + 1] = temp;
}
}
}
//编写主函数测试
int main()
{
//创建线性表并赋值
myList *myL = new myList;
myL->length = 9;
for (int i = 0; i < myL->length; i++)
{
int temp(0);
cout<<"请输入数组中第"<<(i+1)<<"个数据!"<<endl;
cin>>temp;
myL->r[i] = temp;
}
//调用简单排序算法
//bubbleSort(myL);//冒泡排序
//simpleChooseSort(myL);//简单选择排序
directInsertSort(myL);//直接插入排序
//输出排序结果
cout<<"排序后数据如下:"<<endl;
for (int i = 0; i < myL->length; i++)
{
cout<<myL->r[i]<<" ";
}
return 0;
}