日志5

排序的方法

冒泡排序

基本原理:冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢 “浮” 到数列的顶端。

#include <iostream>
using namespace std;
int main() 
{
    int n,i,j,temp;
    cin>>n;
    int a[1000];
    for(i=0;i<n;i++)
    {
        cin>>a[i];
    }
    for(i=0;i<n-1;i++)
    {
        for(j=0;j<n-i-1;j++)
        {
            if(a[j]>a[j+1])
            {
                temp=a[j];
                a[j]=a[j+1];
                a[j+1]=temp;
            }
        }
    }
    for(i=0;i<n;i++)
    {
        cout<<a[i]<<" ";
    }
    return 0;
}

它通过两层循环来实现排序,外层循环控制排序的轮数,内层循环用于比较和交换相邻的元素。

选择排序

选择排序的基本思想是在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

#include <iostream>
using namespace std;
int main() 
{
    int i,j,temp;
    int a[10];
    for(i=0;i<10;i++)
    {
        cin>>a[i];
        for(j=0;j<i;j++)
        {
        if(a[j]>a[i])
            {
                temp=a[i];
                a[i]=a[j];
                a[j]=temp;
            }
        }  
    }
    for(i=0;i<10;i++)
        {
            cout<<a[i]<<" ";
        }
    return 0;
}

外层循环确定当前要放置最小元素的位置,内层循环用于找到未排序部分的最小元素的索引,然后交换

插入排序

基本原理:插入排序的基本操作是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据。它的工作方式像人们排序一手扑克牌一样,开始时,我们的左手为空并且桌上的牌面向下。然后,我们每次从桌上拿走一张牌并将它插入左手中正确的位置。

#include <iostream>
void insertionSort(int arr[], int n) {
    for (int i = 1; i < n; ++i) {
        int key = arr[i];
        int j = i - 1;
        while (j >= 0 && arr[j] > key) {
            arr[j + 1] = arr[j];
            j = j - 1;
        }
        arr[j + 1] = key;
    }
}
int main() {
    int arr[] = {5, 2, 8, 1, 9};
    int n = sizeof(arr)/sizeof(arr[0]);
    insertionSort(arr, n);
    for (int i = 0; i < n; ++i) {
        std::cout << arr[i] << " ";
    }
    return 0;
}


key是要插入到已排序部分的元素,j用于在已排序部分找到合适的插入位置。

全部评论

相关推荐

暮雨轻歌:看起来hr不能接受我菜查看图片
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
牛客网
牛客企业服务