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;
}
即可:
另外还有快速排序和递归排序请参考:
快速排序
归并排序