LintCode 题目:整数排序

mac2026-04-11  6

URL:https://www.lintcode.com/problem/sort-integers/description

描述

给一组整数,按照升序排序,使用选择排序,冒泡排序,插入排序或者任何 O(n2) 的排序算法。

您在真实的面试中是否遇到过这个题?  

样例

样例 1: 输入: [3, 2, 1, 4, 5] 输出: [1, 2, 3, 4, 5] 样例解释: 返回排序后的数组。 样例 2: 输入: [1, 1, 2, 1, 1] 输出: [1, 1, 1, 1, 2] 样例解释: 返回排好序的数组。

思路:

首先你应该掌握vector的基本操作(请参考:vector常用解法及详解)。

 

 

1.使用algorithm下的sort()函数(请参考:algorithm头文件下的常用函数之sort()):

在代码段中添加:

sort(A.begin(),A.end());

即可:

 

2.冒泡排序(请参考:冒泡排序):

(1)迭代器访问:

在代码段中添加:

for(vector<int>::iterator it = A.begin()+1;it != A.end();it++){ for(vector<int>::iterator it1 = A.begin();it1 != A.end()-1;it1++){ if(*it1>*(it1+1)){ int temp = *it1; *it1 = *(it1+1); *(it1+1) = temp; } } }

即可:

(2)下标访问:

在代码段中添加:

for(int i=1;i<A.size();i++){ for(int j=0;j<A.size()-i;j++){ if(A[j]>A[j+1]){ int temp = A[j]; A[j] = A[j+1]; A[j+1] = temp; } } }

即可:

 

 

3.选择排序(请参考:选择排序):

下标访问:

在代码段中添加:

for(int i=0;i<A.size();i++){ int min = i; for(int j=i;j<A.size();j++){ if(A[j]<A[min]){ min = j; } } int temp = A[i]; A[i] = A[min]; A[min] = temp; }

即可:

 

4.插入排序(请参考:插入排序):

下标访问:

在代码段中添加:

for(int i=1;i<A.size();i++){ int temp = A[i]; int j=i; while(j>0&&temp<A[j-1]){ A[j] = A[j-1]; j--; } A[j] = temp; }

即可:

 

 

另外还有快速排序和递归排序请参考:

快速排序

归并排序

 

 

 

最新回复(0)