快速排序
规则:对于序列,选择一个基准数(一般选择第一个),左边都是不大于基准数的数,右边都是不小于基准数的数,继续对基准数两边的序列进行快排。
下面展示 快速排序
的代码。
/--------------------C++----------------------/
void QuickSort(int* n,int start,int end)//n表示数组的首地址,start表示开始的下标,end表示结束的下标
{
//跳出条件
if(start>=end)
return;
int temp=n[start],i=start,j=end;//temp保存基准数,i和j分别是移动的下标(i++,j--)
while(i<j)
{
//从右边找比基准数小的数,放到i对应的位置上
while(i<j&&n[j]>=temp)
{
j--;
}
n[i]=n[j];
//从左边找出比基准数大的数,放到j对应的位置上
while(i<j&&n[i]<=temp)
{
i++;
}
n[j]=n[i];
}
//n[i]用基准数赋值
n[i]=temp;
//递归
QuickSort(n,start,i-1);
QuickSort(n,i+1,end);
}
/-----------------------C#------------------------/
/// <summary>
/// 快速排序
/// </summary>
/// <param name="_array">数组</param>
/// <param name="_start">开始的下标</param>
/// <param name="_end">结束的下标</param>
public static void QuickSort(int[] _array,int _start,int _end)
{
//跳出条件
if (_start >= _end)
return;
//temp保存基准数,i和j分别是移动的下标
int temp = _array[_start];int i=_start,j=_end;
while(i<j)
{
//从右边找出比基准数小的数,放到i对应的位置上
while(i<j&&_array[j]>=temp)
{
j--;
}
_array[i] = _array[j];
//从左边找出比基准数大的数,放到j对应的位置上
while(i<j&&_array[i]<=temp)
{
i++;
}
_array[j] = _array[i];
}
//_array[i]用基准数赋值
_array[i] = temp;
//递归分别给两边排序
QuickSort(_array, _start, i - 1);
QuickSort(_array, i + 1, _end);
}
选择排序
规则:对于序列,第一轮选择当前序列中最小的元素,与第一个元素进行交换
第二轮找剩下的序列中最小的元素,与第二个进行交换
第n-1轮,排序结束
下面展示 选择排序
的代码。
for(int i=0;i<size-1;i++)//外层循环:轮数
{
//找出最小的数
int k=i;//讲第一个数作为最小数(k表示最小值的下标)
for(int j=i+1;j<size;j++)
{
if(n[j]<n[k])
{
k=j;//记录下最小的下标值
}
}
//将i和k对应的下标元素交换
if(i!=k)
{
swap(n[i],n[k]);//C++中可直接使用
n[i]=n[i]^n[k];
n[k]=n[i]^n[k];
n[i]=n[i]^n[k];
}
}