1. 程式人生 > 其它 >C# DataTable 和List之間相互轉換的方法(轉)

C# DataTable 和List之間相互轉換的方法(轉)

#include <bits/stdc++.h>

using namespace std;

const int N = 100005;
int a[N];

//快速排序
void quickSort(int q[], int l, int r){
    if(l >= r){
        //如果相等應該指的是陣列只有一個元素,
        //而大於的話暫時我也想不明白
        return;
    }
    
    int index = q[(l + r) >> 1];   //這個值取誰都行,但是要注意邊界問題
    // printf("index = %d\n", index);
    int i = l - 1, j = r + 1;   //同時走兩個迴圈,先往後放一個位置,後續的操作都先做移動操作
    // printf("l = %d\n", l);
    // printf("r = %d\n", r);

    
    while(i < j){
        //只要i指標在j指標的左邊,兩個指標就都要繼續走
        //i指標,先移動,再判斷,
        //當i指標指向的位置的值大於或等於index的值時,就不迴圈了
        //此時i指標指在這個大於或等於index的值的位置
        do{
            i++;
        }while(q[i] < index);
        //j指標同理
        do{
            j--;
        }while(q[j] > index);
        //他們倆都停下的時候
        //如果i指標在j指標的左邊,就交換
        //如果i指標不在j指標的左邊的話,if進不去,下一次迴圈也進不去
        if(i < j){
            // printf("q[%d] = %d\n", i, q[i]);
            // printf("q[%d] = %d\n", j, q[j]);
            q[i] = q[i] ^ q[j];
            q[j] = q[i] ^ q[j];
            q[i] = q[i] ^ q[j];
            
            //swap(q[i], q[j]);
        }
    }
    /*
    for(int i = l; i <= r; i++){
        if(i == r){
            printf("%d\n", a[i]);
        }else {
            printf("%d ", a[i]);
        }
    }
    */
    //當i指標不在j指標的左邊的話,就證明這個l-r都排好了,
    //然後遞迴的再分兩個區間,直到排序完畢
    quickSort(q, l, j);
    quickSort(q, j + 1, r);
    
}
int main(){
    int n;  //需要排序的個數
    scanf("%d", &n);
    for(int i = 0; i < n; i++){
        scanf("%d", &a[i]);
    }
    quickSort(a, 0, n - 1);
    for(int i = 0; i < n; i++){
        if(i == n - 1){
            printf("%d", a[i]);
        }else {
            printf("%d ", a[i]);

        }
    }
    
    return 0;
}
一名電腦科學與技術的女大學生~