|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目描述:
- 一个长度为n的数组,乱序存放着[0, n-1],现在只允许0与其它数交换,将数组从小到大排序
复制代码
- #include <iostream>
- using namespace std;
- void print(int *array,int len) {
- for (int i = 0; i < len; i++) {
- cout << array[i] << " ";
- }
- cout << endl;
- }
- void swap_with_zero(int* array, int len, int n){
- int pos0 = 0, posn = 0;
- int cnt = 0;
- for(int i = 0; i < len; i++){
- if(array[i] == 0){
- pos0 = i;
- cnt++;
- }
- if(array[i] == n){
- posn = i;
- cnt++;
- }
- if(cnt == 2) break;
- }
- int temp = array[pos0];
- array[pos0] = array[posn];
- array[posn] = temp;
- return;
- }
- void sort(int* array, int len){
- if(array[0] != 0) swap_with_zero(array, len, array[0]);
- for(int i = 1; i < len; i++){
- if(array[i] != 0){
- if(array[i] == i) continue;
- else{
- swap_with_zero(array, len, array[i]);
- swap_with_zero(array, len, i);
- }
- }
- }
- }
- int main(){
- int array[] = {5, 3, 2, 4, 1, 6, 7, 0};
- int len = sizeof(array) /sizeof(int);
- sort(array, len);
- print(array, len);
- system("pause");
- return 0;
- }
复制代码
注意事项:
1.这里0更多像是一个复制的前置头。 |
|