1.插入排序
適合對少量元素進行排序的有效算法,插入算法採用的方法和我們平時打牌是相似的,每抽一張牌,都會按花色大小插到合適的位置。每次從數據集裏拿來一個數據,就將它放置到已排序隊列的正確位置。
例如:
有一個待排序列{4,9,7,20,3,16,18},首先是第一個數4,{(4),9,7,20,3,16,18},接下來是9,然後序列是{(4,9),7,20,3,16,18},依此如此將數逐個進行比較排序。N個數據需要插入N-1次完成排序。
template<typename datatype>void insertsort(datatype D[],int length)
{
datatype key;
for(int j=2;j<length;j++)
{
key=D[j];
int i=j-1;
while(i>0&&key<D[i])
{
D[i+1]=D[i];
i=i-1;
}
}
D[i+1]=key;
}
}
2.冒泡排序
冒泡排序,是交換排序的一種,是根據在水中輕氣泡不能在重氣泡之下的原則設計的。主要思想是:掃描所有數據,兩兩比較,發現違反氣泡重在下原則的則交換兩者的位置,讓重氣泡下沉,輕氣泡上浮。
template<typename datatype>void swap(datatype*a,datatype*b)
{
keytype temp;
temp=*a;
*a=*b;
*b=temp;
}
template<typename datatype>void bubblesort(datatype data[],int n)
{
int flag;
int i=1,j;
do{
for(j=0;j+1<n;j++)
{
if(data[j]>data[j+1])
{
swap(data[j],data[j+1]);
flag=1;
}
}
i++;
}while(i<n&&flag==1);
}
3.選擇排序
選擇排序其實可以和冒泡一起理解,掃描數據最多N-1次,每次都假設一個最小值或最大值,然後比較數據找到真的最大或最小的值。
template<typename datatype>void selectionsort(datatype data[],int n)
{
int i=1,j;
int max;
datatype temp;
while(i<=n-1)
{
max=n-i;
for(j=0;j<n-i+1;j++)
{
if(data[j]>data[max])
max=j;
}
if(max!=n-i)
{
temp=data[max];
data[max]=data[n-i];
data[n-i]=temp;
}
i++;
}
}