编写一个对整形数组A[n]中的A[0]~A[n-1]元素进行排序的算法

2025-03-15 17:41:40
推荐回答(4个)
回答1:

void SelectSort(int A[],int n)
{
int len = sizeof(A)/sizeof(int);
int startPos = 0;
int endPos = len - 1;
int minPos = 0, maxPos = 0;
int temp = 0;

while (startPos >= endPos)
{
minPos = maxPos = startPos;

//找出startPos到endPos区间内最小值和最大值所在位置
for (int i=startPos;i<=endPos;i++)
{
if (A[i] < A[minPos])
{
minPos = i;
}
else if (A[i] > A[maxPos])
{
maxPos = i;
}
}

//将最小值放到startPos位置
temp = A[minPos];
A[minPos] = A[startPos];
A[startPos] = temp;

//将最大值放到endPos位置
temp = A[minPos];
A[minPos] = A[startPos];
A[startPos] = temp;

//将最大值和最小值从排序区间中移出,进行下一轮排序
startPos++;
endPos--;
}
}

回答2:

//那叫冒泡排序,用PHP写法是这样的,
function bubbleSort($arr) {
    $len = count($arr);
//该层循环控制 需要冒泡的轮数
    for ($i = 1; $i < $len; $i++) {
//该层循环用来控制每轮 冒出一个数 需要比较的次数
        for ($k = 0; $k < $len - $i; $k++) {
            if ($arr[$k] > $arr[$k + 1]) {
                $tmp = $arr[$k + 1]; // 声明一个临时变量
                $arr[$k + 1] = $arr[$k];
                $arr[$k] = $tmp;
            }
        }
    }
    return $arr;
}

回答3:

这里假设0全部放在中间void changeOrder(int A[], int result[], int N) { int lp = 0; int rp = N-1; for(int i=0;i 0) { result[rp--] = A[i]; } else if(A[i] < 0) { result[lp++] = A[i]; } } for(int i=lp;i<=rp;i++) { result[i] = 0; }}

回答4:

楼上的回答在进行位置交换的时候还需要加一个判断,避免maxpos=minpos时出错