#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void reverse(int p[],int left,int right)//使資料顛倒順序
{
int temp;
while (left < right)
{
temp = p[left];
p[left] = p[right];
p[right] = temp;
right++; left++;
}
}
void sort1(int p[], int left, int right)//將一組正...正負...負的數順序換位
{
int i=0;
reverse(*p, left, right);
while (p[i++] < 0) { ; }
reverse(*p, left, i - 2);
reverse(*p, i - 1, right);
}
void CompletelySort(int* p, int left, int right)//將整個陣列排為負數在前,正數在后且不改變原來順序的陣列
{
int i=0,j=0;
while (left < right)
{
while (p[left++] > 0) { ; }
left = left - 1;
j += left;
while (p[j++] < 0) { ; }
reverse(*p, left, j - 2);
}
}
main()
{
int a[] = { 1,2,-3,4,-6,-7,9,-10,7,22,-78 };
int right =sizeof(a)/sizeof(int)-1;
for (int i = 0; i < right; i++)
{
printf("%d ", a[i]);
}
CompletelySort(a, 0, right);
for (int i = 0; i < right;i++)
{
printf("\n%d ",a[i]);
}
}
uj5u.com熱心網友回復:
大概溜一眼代碼,感覺問題不少reverse函式while回圈應該是right--,left++,否則就死回圈了
reverse函式呼叫函式地方reverse(*p,left,right)要改成reverse(p,left,right),注意引數*p和p的區別
剩下一就沒細看了
uj5u.com熱心網友回復:
right--; left++;轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/236278.html
標籤:C語言
