欢迎访问宙启技术站
智能推送

如何排序一个整数数组

发布时间:2023-06-12 21:12:14

排序是计算机编程中最基本的问题之一,它可以用来解决很多问题,如查找、去重、求中位数等等。在实际工作中,我们常常需要对数据进行排序,这里介绍一下如何对整数数组进行排序。

一、冒泡排序

冒泡排序是最简单的排序算法之一,它的基本思想是:每次比较相邻两个元素,如果前一个元素大于后一个元素则交换它们的位置,这样一趟排序后最大的元素就会排在数组的最后面,然后对剩下的元素再进行排序,直到全部元素排序完毕。

冒泡排序的时间复杂度为O(n^2),最坏情况下需要进行n*(n-1)/2次比较,因此对于大数据集来说,冒泡排序效率比较低。

void bubbleSort(int a[], int n)

{

    for(int i=0; i<n-1; ++i)

    {

        for(int j=0; j<n-i-1; ++j)

        {

            if(a[j] > a[j+1])

            {

                int temp = a[j];

                a[j] = a[j+1];

                a[j+1] = temp;

            }

        }

    }

}

二、选择排序

选择排序的基本思想是:每次从未排序的元素中选取最小值,放置在已排序的数组的末尾。经过n-1次排序,数组就排好序了。

选择排序的时间复杂度为O(n^2),与冒泡排序相同,但是由于每次只进行一次交换操作,因此选择排序的效率要略高于冒泡排序。

void selectionSort(int a[], int n)

{

    for(int i=0; i<n-1; ++i)

    {

        int minIndex = i;

        for(int j=i+1; j<n; ++j)

        {

            if(a[j] < a[minIndex])

                minIndex = j;

        }

        if(minIndex != i)

        {

            int temp = a[i];

            a[i] = a[minIndex];

            a[minIndex] = temp;

        }

    }

}

三、插入排序

插入排序的思想是:假设前面的数已经有序,后面的数依次插入到合适的位置,并保持排序。具体的实现是:将一个待排序的元素插入到已经排序的数组中,并将比它大的元素依次后移,直到找到它应该插入的位置。

插入排序的时间复杂度也是O(n^2),但是由于它每次只需要移动一次元素,所以对于部分有序的数组来说,插入排序的效率要比冒泡排序和选择排序更高。

void insertionSort(int a[], int n)

{

    for(int i=1; i<n; ++i)

    {

        int temp = a[i];

        int j = i;

        while(j > 0 && temp < a[j-1])

        {

            a[j] = a[j-1];

            --j;

        }

        a[j] = temp;

    }

}

四、快速排序

快速排序是一种高效的排序算法,它的基本思想是:选择一个基准元素,将数组分成两个部分,左边的部分都比基准元素小,右边的部分都比基准元素大,然后对左右两个部分分别进行同样的操作,直到数组有序。

快速排序的时间复杂度为O(n*log(n)),平均情况下效率是很高的。但是最坏情况下,如果选择的基准元素恰好是数组中最小或最大的元素,每次只能将待排序数组中的一个元素放在它应该在的位置上,需要进行n次递归才能完成排序,此时快速排序的效率就和冒泡排序类似,变成了O(n^2)。

void quickSort(int a[], int left, int right)

{

    if (left < right)

    {

        int i = left, j = right, pivot = a[left];

        while (i < j)

        {

            while (i < j && a[j] >= pivot)

                --j;

            if (i < j)

                a[i++] = a[j];

            while (i < j && a[i] < pivot)

                ++i;

            if (i < j)

                a[j--] = a[i];

        }

        a[i] = pivot;

        quickSort(a, left, i-1);

        quickSort(a, i+1, right);

    }

}

以上就是对于整数数组进行排序的四种方法,每种方法都有它的优缺点,可根据实际情况选择合适的方法。