0交换排序

长度为n的数组乱序存放着0至n-1. 现在只能进行0与其他数的交换,完成以下函数。
注意是元素0只能与娶她元素交换,而不是位置0.

/**
* 交换数组里n和0的位置
* array: 数组
* len: 数组长度
* n: 数组里要和0交换的数
*/
extern void swap_with_zero(int* array, int len, int n);

class Solution {
public:
   /**
    * 调用方法swap_with_zero来对array进行排序
    */
   void sort(int* array, int len) {
   }
};

我的答案:

#include 

void swap_with_zero(int* array, int len, int n){
    int zIndex = -1;
    int nIndex = -1;
    for(int i = 0; i < len; ++i){
        if(array[i] == 0){
            zIndex = i;
        }
        if(array[i] == n){
            nIndex = i;
        }
    }
    int temp = array[zIndex];
    array[zIndex] = array[nIndex];
    array[nIndex] = temp;
    
}

class Solution {
public:
    /**
    * 调用方法swap_with_zero来对array进行排序
    */
    void sort(int* array, int len) {
        if(len <= 1){
            return;
        }
        for(int i = len - 1; i > 0; --i){
            swap_with_zero(array, len, array[i]);
            int curMax = array[i];
            for(int j = i; j >= 0; --j){
                 if(array[j] > curMax){
                     curMax = array[j];
                 }
            }
            swap_with_zero(array, len, curMax);
        }
    }
};

int main(){

    Solution solution;
    int a[] = {3,8,2,4,5,0,1,7,9,6};
    solution.sort(a, 10);
    return 0;

}

你可能感兴趣的:(0交换排序)