选择排序
最简单的一种排序算法的工作过程如下.首先,选出数组中最小的元素,将它与数组中第一个元素进行交换.然后找出次小的元素,并将它与数组中第二个元素交换.按照这个方法一直进行下去,直到整个数组排完序.这种方法叫做选择排序,因为它是通过不断筛选出剩下元素中的最小元素来实现的.
冒泡排序
对于l~r-1内的i值,内部循环(j)通过从左向右遍历元素,对连续的元素进行比较-交换操作,实现将a[i],...,a[r]中最小的元素放到a[i]中.在所有的比较操作中,最小的元素都要移动,所以它就像泡泡那样'冒'到最前端.和插入排序类似,随着索引值从左到右,在i左边的元素都已处在最后的正确位置上.
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <stack>
#include <queue>
#include <malloc.h>
using namespace std;
#define OK 1
#define ERROR -1
#define TRUE 1
#define FALSE 0
typedef int Status;
//选择排序,按从小到大排序
void Selection(int a[], int l, int r)
{
int i, j;
//外层每循环一次,i前的元素已排好序
for(i = l; i < r; i++)
{
int Min = i;
//内层每次循环,i前面的元素已有序,循环j与当前i位置上的元素比较,在i后面的元素中找出第i小的元素
for(j = i+1; j <= r; j++)
{
//如果逆序,则交换
if(a[Min] > a[j])
{
Min = j;
}
}
swap(a[i], a[Min]);
}
}
//冒泡排序,按从小到大排序
void Bubble(int a[], int l, int r)
{
int i, j;
//外层循环,i之前的元素已排好序
for(i = l; i < r; i++)
{
//从后往前,如果后面元素比前一个大,则交换,逐次向上冒
for(j = r; j > i; j--)
{
if(a[j-1] > a[j])
{
swap(a[j-1], a[j]);
}
}
}
}
//输出函数
void Print(int a[], int l, int r)
{
int i;
for(i = l; i <= r; i++)
{
printf("%d ", a[i]);
}
printf("\n");
}
int main()
{
int a[7] = {2, 5, 3, 7, 6, 1, 4};
//选择排序
Selection(a, 0, 6);
//冒泡排序
//Bubble(a, 0, 6);
Print(a, 0, 6);
return 0;
}