指定問題:給定未排序的串列 [6, 5, 4, 3, 7, 1, 2],顯示在回圈的每次迭代之后串列的內容是什么,因為它使用 Python 中的選擇排序進行排序。
我在 Python 中的代碼:
Arr = [6, 5, 4, 3, 7, 1, 2]
print("\n")
for i in range (len(Arr)):
min_idx = i
for j in range (i 1, len(Arr)):
if Arr[min_idx] > Arr[j]:
min_idx = j
Arr[i], Arr[min_idx] = Arr[min_idx], Arr[i]
print("Loop is at index = {0}. Sorting in progress: ".format(i), end=' ')
print(Arr)
print("\nSorted array: ", Arr)
這是上述程式的輸出:
Loop is at index = 0. Sorting in progress: [1, 5, 4, 3, 7, 6, 2]
Loop is at index = 1. Sorting in progress: [1, 2, 4, 3, 7, 6, 5]
Loop is at index = 2. Sorting in progress: [1, 2, 3, 4, 7, 6, 5]
Loop is at index = 3. Sorting in progress: [1, 2, 3, 4, 7, 6, 5]
Loop is at index = 4. Sorting in progress: [1, 2, 3, 4, 5, 6, 7]
Loop is at index = 5. Sorting in progress: [1, 2, 3, 4, 5, 6, 7]
Loop is at index = 6. Sorting in progress: [1, 2, 3, 4, 5, 6, 7]
Sorted array: [1, 2, 3, 4, 5, 6, 7]
現在,我正在嘗試使用插入排序和 C 語言進行相同的排序。但是,我沒有得到像上面撰寫的 Python 程式那樣的輸出。
我在 C 中的代碼:
#include <stdio.h>
void insertionSort(int arr[], int n)
{
int i, key, j;
for (i = 1; i < n; i ) {
key = arr[i];
j = i - 1;
while (j >= 0 && arr[j] > key) {
arr[j 1] = arr[j];
j = j - 1;
}
arr[j 1] = key;
// to print the sorting in progress
for (j = 0; j < n; j ){
// printf("Loop is at index = %d. ", j);
printf("%d ", arr[j]);
if(j == n - 1)
printf("\n");
}
}
}
void printArray(int arr[], int n)
{
int i;
for (i = 0; i < n; i )
printf("%d ", arr[i]);
printf("\n");
}
int main()
{
int arr[] = {6, 5, 4, 3, 7, 1, 2};
int n = sizeof(arr) / sizeof(arr[0]);
printf("\nOriginal array: ");
printArray(arr, n);
printf("\nSorting in progress: \n\n");
insertionSort(arr, n);
printf("\n");
printf("Sorted array: ");
printArray(arr, n);
return 0;
}
我現在得到的輸出:
Original array: 6 5 4 3 7 1 2
Sorting in progress:
5 6 4 3 7 1 2
4 5 6 3 7 1 2
3 4 5 6 7 1 2
3 4 5 6 7 1 2
1 3 4 5 6 7 2
1 2 3 4 5 6 7
Sorted array: 1 2 3 4 5 6 7
如何在 C 程式的輸出中添加以下行?
回圈位于 index = indexValue
我試過了,但我無法弄清楚。
uj5u.com熱心網友回復:
如果要為每次迭代列印除錯輸出,請將列印陳述句移動到最外層的 for 回圈(i回圈)。當前,您在代碼中添加了除錯,它將為陣列的每個元素列印“回圈位于索引”。
for (i = 1; i < n; i ) {
printf("Loop is at index = %d. ", i);
....
}
uj5u.com熱心網友回復:
查看您的代碼,我發現您嘗試在內部 for 回圈(for 回圈內的 for 回圈)中使用 printf() 陳述句。這將導致輸出 7 * 6 倍:
Loop is at index = 0. 4 Loop is at index = 1. 5 Loop is at index = 2. 6 Loop is at index = 3. 3 Loop is at index = 4. 7 Loop is at index = 5. 1 Loop is at index = 6. 2
Loop is at index = 0. 3 Loop is at index = 1. 4 Loop is at index = 2. 5 Loop is at index = 3. 6 Loop is at index = 4. 7 Loop is at index = 5. 1 Loop is at index = 6. 2
Loop is at index = 0. 3 Loop is at index = 1. 4 Loop is at index = 2. 5 Loop is at index = 3. 6 Loop is at index = 4. 7 Loop is at index = 5. 1 Loop is at index = 6. 2
Loop is at index = 0. 1 Loop is at index = 1. 3 Loop is at index = 2. 4 Loop is at index = 3. 5 Loop is at index = 4. 6 Loop is at index = 5. 7 Loop is at index = 6. 2
Loop is at index = 0. 1 Loop is at index = 1. 2 Loop is at index = 2. 3 Loop is at index = 3. 4 Loop is at index = 4. 5 Loop is at index = 5. 6 Loop is at index = 6. 7
要限制您看到輸出的次數,您需要將 printf() 陳述句放在外部 for 回圈(第一個)中。只需復制和粘貼,您就會看到 printf() 陳述句僅運行了 6 次:
Loop is at index = -1. 5 6 4 3 7 1 2
Loop is at index = -1. 4 5 6 3 7 1 2
Loop is at index = -1. 3 4 5 6 7 1 2
Loop is at index = 3. 3 4 5 6 7 1 2
Loop is at index = -1. 1 3 4 5 6 7 2
Loop is at index = 0. 1 2 3 4 5 6 7
這看起來像您要處理的輸出,但您仍然需要找出要放入 printf() 陳述句的變數。
uj5u.com熱心網友回復:
我移動了 printf 陳述句,洗掉了一些換行符,然后又添加了一些。查看行中的注釋以查看更改。這將使您到達 Python 代碼生成的位置:
void insertionSort(int arr[], int n)
{
int i, key, j;
for (i = 1; i < n; i ) {
printf("Loop is at index = %d. ", i);//moved from sort, changed format spec. to d
key = arr[i];
j = i - 1;
printf(" Sorting in progress: ");//moved from main
while (j >= 0 && arr[j] > key) {
arr[j 1] = arr[j];
j = j - 1;
}
arr[j 1] = key;
// to print the sorting in progress
printf("[");//added here
for (j = 0; j < n; j ){
if(j < n-1)//changed - if-else
printf("%d ", arr[j]);
else
printf("%d", arr[j]);
}
printf("]\n");//move outside loop
}
}
void printArray(int arr[], int n)
{
int i;
printf("[");//changed
for (i = 0; i < n; i )
printf("%d ", arr[i]);
printf("]\n");//changed
}
int main()
{
int arr[] = {6, 5, 4, 3, 7, 1, 2};
int n = sizeof(arr) / sizeof(arr[0]);
printf("\nOriginal array: ");
printArray(arr, n);
//printf("\nSorting in progress: \n\n");
insertionSort(arr, n);
printf("\n");
printf("Sorted array: ");//changed
printArray(arr, n);
printf("\n\nHit any key to exit,");//added to pause execution
getchar();
return 0;
}
此代碼的輸出:

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/363009.html
上一篇:使用指標、動態分配、結構時出錯
