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

算法设计题(2)编写一个对整形数组A[n]中的A[0]~A[n-1]元素进行排序的算法,要求 先选出一个值最小的元素和第一个元素交换,再选出一个最大的元素和A[n-1]交换
然后再A[1]….A[n-2]中找出最小的,和A[1]交换,找出最大的和A[n-2]交换
如此反复进行
直到待排序的元素个数小于或等于1时,算法结束
void SelectSort(int A[],int n)
{

}

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--;
}
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-12-10
//那叫冒泡排序,用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;
}

第2个回答  2018-12-10
这里假设0全部放在中间void changeOrder(int A[], int result[], int N) { int lp = 0; int rp = N-1; for(int i=0;i<N;i++) { if(A[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; }}
第3个回答  2019-05-25
楼上的回答在进行位置交换的时候还需要加一个判断,避免maxpos=minpos时出错
相似回答