不稳定的排序算法
简单选择排序
每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列最前,直到全部待排序的数据元素排完。
void selectSort(int *data , int size = SIZE)
{
int outpost=0;
int k=0;
for(int i=0;i<size;i++)
{
k = i;
outpost = data[k];
for(int j=i+1;j<size;j++)
{
if(outpost>data[j])
{
k = j;
outpost = data[k];
}
}
if(i!=k)
swap(data[i],data[k]);
}
}
快排(非随机)
快速排序是对起泡排序的一种改进。基本思想是,通过一趟排序将待排序记录分割成三部分,其中支点为K,一段中任何元素都小于K,一段中任何元素都大于K,递归求解对这两段执行快速排序。
void quickSort(int arr[],int p,int r)
{
if(p<r)
{
int q = partition(arr,p,r);
quickSort(arr,p,q-1);
quickSort(arr,q+1,r);
}
}
int partition(int arr[],int p,int r)
{
int i = p;int j = r+1;
int m = arr[p];
while(true)
{
while(arr[++i]<m&&i<r);
while(arr[--j]>m);
if(i>=j)
break;
swap(arr[i],arr[j]);
}
arr[p] = arr[j];
arr[j] = m;
return j;
}