排序

1. 簡單桶排序ui

void bucketSort()
{
    int a[11];
    int b;
    
    for (int i = 0; i < 11; i++) {
        a[i] = 0;
    }
    
    for (int i = 0; i < 5; i++) {
        scanf("%d", &b);
        a[b]++;
    }
    
    for (int i = 0; i < 11; i++) {
        printf("i=%d,v=%d\n", i, a[i]);
    }
    
    for (int i = 10; i >= 0; i--) {
        for (int j = 0; j < a[i]; j++) {
            printf("%d ", i);
        }
    }
}

 

2. 冒泡排序code

void bubbleSort()
{
    int a[5] = {3,-2, 0, 22, 999};
    
    for(int i = 1; i < 5; i++)
    {
        for (int j = i-1; j < 5; j++)
        {
            if (a[j] > a[i-1]) {
                int tmp = a[i-1];
                a[i-1] = a[j];
                a[j] = tmp;
            }
        }
    }
    
    for (int i = 0; i < 5; i++)
    {
        printf("i=%d,v=%d\n", i, a[i]);
    }
}

時間複雜度:O(N^2)排序

 

3. 快速排序class

void quickSort(int left, int right) {
    if ( left > right ) {
        return;
    }
    
    // 設置基準數
    int refNum = a[left];
    
    // 設置左右起點
    int lPoint = left;
    int rPoint = right;
    
    // 當沒有碰撞的時候,不停的交換
    while (lPoint != rPoint) {
        // 從右邊開始找,比基準數小的數字, 而後中止,注意個人判斷,若是比基準數大,rPoint向前移動一位,也就是說,若是比基準數字小,rPoint記錄的就是這個數字的位置
        while (a[rPoint] >= refNum && lPoint < rPoint) {
            rPoint --;
        }
        
        // 左邊找,比基準數大的數字,而後中止
        while (a[lPoint] <= refNum && lPoint < rPoint ) {
            lPoint ++;
        }
        
        // 交換位置
        if ( lPoint < rPoint ) {
            int temp = a[lPoint];
            a[lPoint] = a[rPoint];
            a[rPoint] = temp;
        }
    }
    
    // 歸位基準數字,這個時候,左右標記點處於同一個位置上,也就是基準點應該在的位置
    a[left] = a[lPoint];
    a[lPoint] = refNum;
    // 交換以後,開始處理子串,基準數不須要動位置
    sort(left, lPoint - 1);
    sort(lPoint + 1, right);
}
相關文章
相關標籤/搜索