[LintCode] Sort Integers 整数排序

Given an integer array, sort it in ascending order. Use selection sort, bubble sort, insertion sort or any O(n2) algorithm.

Example

Given [3, 2, 1, 4, 5], return [1, 2, 3, 4, 5].

这道题让我们实现最基本的几个O(n2)的排序算法,选择排序,冒泡排序和插入排序,都是最基本的排序算法。我们一个一个来看,首先来看冒泡排序,算法思路很简单,遍历数组,把当前数字的后面所有的数字都遍历一遍,遇到小的跟当前数字交换,这样遍历的过程中,所有大的数字就像气泡一样都到数组的后面去了,这也是为啥叫冒泡排序的原因,参见代码如下:

解法一:

// Bubble sort
class Solution {
public:
    /**
     * @param A an integer array
     * @return void
     */
    void sortIntegers(vector<int>& A) {
        for (int i = 0; i < A.size(); ++i) {
            for (int j = i + 1; j < A.size(); ++j) {
                if (A[i] > A[j]) {
                    swap(A[i], A[j]);
                }
            }
        }
    }
};

下面来看插入排序,算法思路是遍历数组,从A[i]开始往前比,如果遇到A[i] < A[i - 1],那么交换两者并--i,直到i=0位置停止,参见代码如下:

解法二:

// Insertion sort
class Solution {
public:
    /**
     * @param A an integer array
     * @return void
     */
    void sortIntegers(vector<int>& A) {
        for (int i = 1; i < A.size(); ++i) {
            while (i > 0 && A[i] < A[i - 1]) {
                swap(A[i], A[i - 1]);
                --i;
            }
        }
    }
};

选择排序也不难,思路是遍历数组,对于当前位置i,我们定义一个变量min_idx,用来记录当前位置往后的最小值的坐标,我们通过遍历之后所有的数字来找到最小值的坐标,然后交换A[i]和A[min_idx]即可,参见代码如下:

解法三:

// Selection sort
class Solution {
public:
    /**
     * @param A an integer array
     * @return void
     */
    void sortIntegers(vector<int>& A) {
        for (int i = 0; i < A.size(); ++i) {
            int min_idx = i;
            for (int j = i + 1; j < A.size(); ++j) {
                if (A[j] < A[min_idx]) {
                    min_idx = j;
                }
            }
            swap(A[i], A[min_idx]);
        }
    }
};

参考资料:

https://luqinblog.wordpress.com/2016/02/29/sort-integers/

时间: 2024-10-29 19:05:41

[LintCode] Sort Integers 整数排序的相关文章

[LintCode] Sort Integers II 整数排序之二

Given an integer array, sort it in ascending order. Use quick sort, merge sort, heap sort or any O(nlogn) algorithm. Example Given [3, 2, 1, 4, 5], return [1, 2, 3, 4, 5]. 解法一: // Quick sort class Solution { public: /** * @param A an integer array *

[LintCode] Sort List 链表排序

Sort a linked list in O(n log n) time using constant space complexity. Have you met this question in a real interview? Yes Example Given 1->3->2->null, sort it to 1->2->3->null. Challenge Solve it by merge sort & quick sort separatel

LeetCode | 1387. Sort Integers by The Power Value将整数按权重排序【Python】

LeetCode 1387. Sort Integers by The Power Value将整数按权重排序[Medium][Python][排序] Problem LeetCode The power of an integer x is defined as the number of steps needed to transform x into 1 using the following steps: if x is even then x = x / 2 if x is odd t

sort()使整数排序

sort()方法可将数组升序排序,但它是把数组的值转化为字符串后在排序的, 如 var a = [1,12,3,8,123] a.sort()  结果 1,12,123,3,8 和我们想要的结果不一样,解决方法, function compare(value1, value2) { return value1 - value2; } var values = [1,12,3,8,123]; values.sort(compare); alert(values); //1,3,8,12,123 如

Leetcode:Sort colors 计数排序

Sort colors: Given an array with n objects colored red, white or blue, sort them so that objects of the same color are adjacent, with the colors in the order red, white and blue. Here, we will use the integers 0, 1, and 2 to represent the color red,

[华为上机练习题]6.整数排序

题目 描述: 实现输入一组大于等于0的整数,根据从小到大的顺序排序后输出,排序后有连续数时,只输出连续数中最小和最大的两个数. 题目类别: 排序 难度: 高级 运行时间限制: 10Sec 内存限制: 128MByte 阶段: 入职前练习 输入: 一组大于等于0的整数,不考虑非法输入,各个整数之间以逗号(",")分隔, 输入字符串的总长度小于等于100个字节. 输出: 排序后的值,各个整数之间以空格分隔. 样例输入: 1,4,3,110,2,90,7 样例输出: 1 4 7 90 110

codeup-大整数排序

Problem E: 大整数排序 Time Limit: 1 Sec  Memory Limit: 32 MBSubmit: 433  Solved: 198[Submit][Status][Web Board][Creator:Imported] Description 对N个长度最长可达到1000的数进行排序. Input 输入第一行为一个整数N,(1<=N<=100).接下来的N行每行有一个数,数的长度范围为1<=len<=1000.每个数都是一个正数,并且保证不包含前缀零.

C/C++算法竞赛入门经典Page11 例题1-5 三整数排序

题目:输入3个整数,从小到大排序后输出 样例输入: 20 7 33 样例输出: 7 20 33 首先,先声明三个整数a,b,c和一个临时变量t: int a,b,c,t;//1,b,c为三个整数,t为临时变量 输入三个整数: scanf("%d%d%d",&a,&b,&c); 进行3次if判断: 1.如果b>a,则a,b对调 2.如果c>a,则a,c对调 3.如果c>b,则b,c对调 代码: if(b>=a){ t=b; b=a; a=t

C#中List调用库函数sort进行升序排序

private void button1_Click(object sender, EventArgs e) { List<int> demo2 = new List<int>(); demo2.Add(1); demo2.Add(56); demo2.Add(34); demo2.Add(4); demo2.Add(5); demo2.Add(6); int[] demo3=demo2.ToArray();//z重点是将list转换为arry类型.然后调用arry的sort函数进