2

我只是练习了一下,并尝试使用冒泡排序算法对数组进行排序。编译器没有给我任何警告或错误,它运行良好!首先你输入一个数字 10 次,然后程序对它们进行排序 + 打印它们。

代码:

#include <iostream>
using namespace std;

void arr_sort(int* array, const int arr_size){

int temp = 0;   //Temporary integer to store (if necessary) the current element
int end = 0;    //Run time condition

while(end++ != arr_size){ // Will loop max. 10 times

    for(int i = 0; i < arr_size; i++){

        if(array[i] > array[i + 1]){    //If the current element 
            temp = array[i];    //is bigger than the next

            array[i] = array[i + 1];//Change the positions
            array[i + 1] = temp;    
        }
    }
}

}

int main(){

int arr_input[10];

for(int i = 0; i < 10;i++)      //The user has to type 10 numbers
    cin >> arr_input[i];        //which will be stored in this array

arr_sort(arr_input, 10);        //sorts the array

cout << endl << endl;

for(int i = 0; i < 10; i++)     //Print out the array!
    cout << arr_input[i] << ", ";
cout << endl;

return 0;
}

我唯一的问题是 arr_sort 函数中的 while 循环。我的意思是它对数组进行排序,直到end具有与arr_size相同的值。但通常不需要那么长时间。我现在的问题......我该如何改进这个功能?如何测试数组是否已完全排序,以便 while 循环可以停止而无需再次运行......?

4

2 回答 2

6

在您的for循环之前,假设它已排序:

bool sorted = true;

在您的if声明中,记录它未排序:

sorted = false;

在你的循环之后for,如果没有证据表明它没有排序,则返回:

if ( sorted ) return;
于 2013-03-20T15:07:40.727 回答
3

在 for 循环之外,放置一个 bool 并将其设置为 false。在交换块内,将 bool 设置为 true。在 for 循环之后,检查布尔值,如果它仍然为 false,则没有进行交换,因此数组已排序,因此退出 while 循环。

while(end++ != arr_size){ // Will loop max. 10 times

    bool swapped = false;
    for(int i = 0; i < arr_size; i++){

        if(array[i] > array[i + 1]){    //If the current element 
            temp = array[i];    //is bigger than the next

            array[i] = array[i + 1];//Change the positions
            array[i + 1] = temp;
            swapped = true;    
        }
    }
    if (!swapped) break;
}
于 2013-03-20T15:06:48.010 回答