基本排序方法-选择排序和冒泡排序(来自:算法:C语言实现)

选择排序

最简单的一种排序算法的工作过程如下.首先,选出数组中最小的元素,将它与数组中第一个元素进行交换.然后找出次小的元素,并将它与数组中第二个元素交换.按照这个方法一直进行下去,直到整个数组排完序.这种方法叫做选择排序,因为它是通过不断筛选出剩下元素中的最小元素来实现的.

冒泡排序

对于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;
}

猜你喜欢

转载自blog.csdn.net/weixin_42480264/article/details/81662050