一 直接插入排序
基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中的适当位置,直到全部记录插入完成为止。
算法:
void Insertsort(int data[],int n)
{
int i,j,temp;
for(i=1;i<=n;i++)
{
temp=data[i];
j=i-1;
while(data[j]>temp)
{
data[j+1]=data[j];
j--;
}
data[j+1]=temp;
}
}
二 冒泡排序
基本思想是:首先将所有待排序的数字放入数组中。 从列表的第一个数字到倒数第二个数字,逐个检查:若某一位上的数字大于他的下一位,则将它与它的下一位交换。 重复2号步骤,直至再也不能交换。 冒泡排序的平均时间复杂度与插入排序相同,也是平方级的,但也是非常容易实现的算法。
算法:
void Bubblesort(int data[],int n)
{
int i,j,temp,tag;
for(i=0,tag=1;tag==1&& i<n;i++)
{
tag=0;
for(j=1;j<=n-i;j++)
{
if(data[j-1]>data[j])
{
temp=data[j-1];
data[j-1]=data[j];
data[j]=temp;
tag=1;
}
}
}
}
三 直接排序
基本思想是:直接选择排序是从无序区选一个最小的元素直接放到有序区的最后。
算法:
void Selectsort(int data[], int n)
{
int i, j, temp, nMinIndex;
for (i = 0; i < n; i++)
{
nMinIndex = i;
for (j = i + 1; j < n; j++)
{
if (data[j] < data[nMinIndex])
nMinIndex = j;
}
temp=data[nMinIndex];
data[nMinIndex]=data[i];
data[i]=temp;
}
}
四 快速排序
基本思想是:断寻找一个序列的中点,然后对中点左右的序列递归的进行排序,直至全部序列排序完成,使用了分治的思想。
算法:
void QuickSort(int data[], int low, int high)
{
int i, j, key;
if(low<high)
{
key=data[low];
i=low; j=high;
while(i<j)
{
while(i<j&&data[j]>=key) j--;
if(i<j) data[i++]=data[j];
while(i<j&&data[i]<=key) i++;
if(i<j) data[j--]=data[i];
}
data[i]=key;
QuickSort(data, low , i-1);
QuickSort(data, i+1 , high);
}
}