- 1:冒泡排序
单向冒泡排序
void BubbleSort(int a[], int length)//冒泡排序
{
int i, j;
for(i = 0; i < length-1; i++)///length-1个数需要进行比较
{
for(j = 0; j < length-1-i; j++)每循环一次可以找到最大的数放在最后一个位置、依次进行
{
if(a[j] > a[j+1]) //若前一个数大于后一个数,则交换位置
{
Swap(a[j], a[j+1]);
}
}
}
}
双向冒泡排序
void DoubleBubbleSort(int a[],int length)
{
int low=0,high=length-1,i,j;
while(low<high){
for(i=low;i<high;i++)//正向冒泡,从前往后找最大值
{
if(a[i]>a[i+1])
{
swap(a[i],a[i+1]);
}
}
high--;
for(j=high;j>low;j--)//反向冒泡,从后往前找最小值
{
if(a[j]<a[j-1])
{
swap(a[j],a[j-1])
}
}
low++;
}
}
- 2:快速排序
void QuickSort_1(int a[], int left, int right)
{
int i=left,j=right,k=a[right];//选择最后一个元素为基准元素
while(i < j)
{
while(i < j && arr[i] <= k)//正向遍历、找出大于基准元素的下标
{
i++;
}
arr[j] = arr[i];
while(i <j && arr[j] >= k)反向遍历、找出小于基准元素的下标
{
j--;
}
arr[i] = arr[j];
}
arr[i] = k;
QuickSort_1(arr, left, i-1); //递归完成基准元素左边序列的排序
QuickSort_1(arr, i+1, right); //递归完成基准元素右边序列的排序
}
- 3:简单选择排序
void SelectSort(int a[],int length)
{
int i=0,j=length-1,k;
for(;i<length-1;i++)
{
k=i;
for(j=i+1;j<length;j++)
{
if(a[k]>a[j])///记住最大值下标
k=j;
}
if(k!=i)
{
swap(a[i],a[k]);//交换最大值下标
}
}
}
- 4:堆排序
- 5:希尔排序
- 6:归并排序
- 7:直接插入排序