2017-04-26 32 views
-2

我的C程序出了什麼問題?標題是將n數從小到大排序,當我運行它時,一切正常,但數字未被排序。我只是不知道該如何解決,儘管我已經想了很久。我的C程序有什麼問題?這是關於指針和選擇排序

下面是代碼:

#include <stdio.h> 
#include <time.h> 
#include <stdlib.h> 

void selection(int *a[], int n); 
int main() 
{ 
    int n; 
    int i; 
    scanf("%d", &n); 
    int *a[n]; 
    int b[n]; 
    srand((int) time(0)); 
    for (i = 0; i < n; i++) 
    { 
     b[i] = ((int) (rand() % 100)); 
     a[i] = &b[i]; 
    } 
    selection(a, n); 
    return 0; 
} 

void selection(int *a[], int n) 
{ 
    int i; 
    int j; 
    int position; 
    int temp; 
    for (i = 0; i < n - 1; i++) 
    { 
     position = i; 
     for (j = i + 1; j < n; j++) 
     { 
      if (*a[i] > *a[j]) 
       position = j; 
     } 
     temp = *a[i]; 
     *a[i] = *a[position]; 
     *a[position] = temp; 
    } 
    for (i = 0; i < n - 1; i++) 
     printf("%d\n", *a[i]); 
} 
+1

是關於quicksort的代碼嗎? – Muntasir

+3

你爲什麼要求'quicksort'和你的函數名是'bubble' ... o.O – LPs

+1

@Junsong Huang沒有快速排序,也沒有泡沫排序。我認爲有錯誤的選擇排序。:) –

回答

1

我發現無論是快速排序,也沒有在提交代碼冒泡排序。

看來你正在嘗試使用選擇排序。

我認爲該功能可以看下面的方式。

void selection_sort(int * a[], int n) 
{ 
    int i; 

    for (i = 0; i < n; i++) 
    { 
     int position = i; 
     int j = i + 1; 

     for (; j < n; j++) 
     { 
      if (*a[j] < *a[position]) position = j; 
     } 

     if (position != i) 
     { 
      int *temp = a[position]; 
      a[position] = a[i]; 
      a[i] = temp; 
     } 
    } 

    for (i = 0; i < n; i++) printf("%d ", *a[i]); 
    putchar('\n'); 
} 
+0

非常感謝你!這是我關於指針的問題。所以我認爲我應該交換地址而不是價值,如果我交換價值,因爲地址沒有改變,當做'printf'時,價值將不會改變。 –

+0

@JunsongHuang看來你正試圖根據一個指針所指向的一個值小於另一個指針所指向的值的標準對指針數組進行排序。這是原始值的數組沒有改變。它是指向原始數組元素的指針數組被改變。 –