簡體   English   中英

下面我的 C 選擇排序代碼有什么問題? 我應該在我的無效選擇排序中做什么

[英]What is wrong with my C selection sort code below? what should I do in my void selection sort

所以這是命令,創建一個由 int 和 string 類型的變量組成的結構數組(總共 15 個元素)。 對數組進行排序,並根據具有 int 類型變量的元素之一對數組執行搜索。 使用直接選擇排序和插值搜索。 我是學習選擇排序的新手,請更正下面的代碼,我已經達到了我的極限。

#include <stdio.h>
#include <string.h>
#include <conio.h>

void swap(int *xp, int *yp) {
int temp = *xp;
*xp = *yp;
*yp = temp;
}

void selectionSort(int angka[], int n) {
int i, j, k;

for (i = 0; i < n-1; i++) {
    k = i;
    for (j = i+1 ; j < n; j++) {
        if (angka[j] < angka[k]);
        k = j;
    }
    swap(&angka[k], &angka[i]);
  }
} 

void printArray(int angka[], int size) {
int i;
for (i=0; i < size; i++) {
    printf("%d", angka[i]);
}
printf("\n");
}

struct dat {
int angka;
const char* name;
};

int main () {

struct dat nama_var[15];
nama_var[0].angka = 4;
nama_var[0].name = "Farina";
nama_var[1].angka = 12;
nama_var[1].name = "Rima";
nama_var[2].angka = 7;
nama_var[2].name = "Jihan";
nama_var[3].angka = 1;
nama_var[3].name = "Audi";
nama_var[4].angka = 14;
nama_var[4].name = "Tantri";
nama_var[5].angka = 5;
nama_var[5].name = "Farhan";
nama_var[6].angka = 15;
nama_var[6].name = "Tedi";
nama_var[7].angka = 6;
nama_var[7].name = "Husain";
nama_var[8].angka = 9;
nama_var[8].name = "Laudia";
nama_var[9].angka = 13;
nama_var[9].name = "Sari";
nama_var[10].angka = 2;
nama_var[10].name = "Ardi";
nama_var[11].angka = 10;
nama_var[11].name = "10";
nama_var[12].angka = 8;
nama_var[12].name = "Johan";
nama_var[13].angka = 11;
nama_var[13].name = "Misbah";
nama_var[14].angka = 3;
nama_var[14].name = "CIndy";

我被困在這里的代碼

int n = sizeof(nama_var.angka)/sizeof(nama_var.angka[]); 
selectionSort(nama_var[15], n);
printf("Sorted : \n");
printArray(angka, n);
getch();
}

在您的nama_var數組中,您有名稱和整數,並且您想根據整數對數組進行排序,但是您創建了一個 function 對整數數組進行排序。 讓我們稍微改變一下您的 function 以便它對結構進行排序:

void selectionSort(struct dat names[], int n);
void swap(struct dat *xp, struct dat *yp); /* struct dat *temp = *xp; */

您想根據它們的angka值對結構進行排序,因此您必須從結構中提取它們以便比較它們:

if (angka[j] < angka[k])

變成:

if (names[j].angka < names[i].angka)

最后,我認為您犯了兩個錯字,每次都繞過了 if 語句:單個分號是 C 中的有效語句。

for (j = i+1 ; j < n; j++) {
    if (angka[j] < angka[k]) /* ; <---- */
        k = j;
}

你調用 function 它應該采用一個數組,但是通過放置方括號,你將在索引 15 處給出元素(它在數組之外):

selectionSort(nama_var[15], n);

你試圖做的是:

selectionSort(nama_var, n);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM