잘못 로직
OP 의 코드 실패로 인해
}else if (A[i]>=A[i+1]){
tempdcr++;
야
}
if (A[i]>=A[i+1]) {
tempdcr++;
을 고려하는 경우 A[i]==A[i+1]
모두,카운터가 증가 한다.
값이 정크
누락 초기화 @kaylum.
// int tempcr, tempdcr;
int tempcr = 0;
int tempdcr = 0;
다른 방법:
가는 4 가능성
배열의 값이 동일한 값을 모든 곳입니다-또는 의의 길이 0.
배열을 오름차순입니다. A[i] >= A[i-1]
모 i > 0
고의 길이는보다 더 많은 0 입니다.
배열이 내림차순으로. A[i] <= A[i-1]
모 i > 0
고의 길이는보다 더 많은 0 입니다.
위의 없음.
단순히 반복하고 조정 플래그입니다. int tempcr, tempdcr;
카운터가 필요하지 않습니다.
int Is_Sorted(const int* A, int n) {
bool isAscending = true;
bool isDescending = true;
for (int i = 1; i<n; i++) { // start at 1
if (A[i] < A[i-1]) isAscending = false;
if (A[i] > A[i-1]) isDescending = false;
}
if (isAscending && isDescending) {
return TBD; // Unsure what OP wants here
}
if (isAscending) {
return 1;
}
if (isDescending) {
return -1;
}
return 0;
}
단순화와 일부 마이크로 최적화를 가능하지만,무언가를 명확하게 명확한 접근 방식이다.
너무 많은 재미 있습니다.
는 경우 int a[]
이 일정하지 않은,우리가 사용할 수 있고 1 시험 반복 당신 3: 하는 테스트, 더 적은, 더 위의 코드입니다.
먼저 찾는 불평등에서 끝을 향해 처음이다. 첫 번째 요소는 조정이 다를 수 있습니다.
면 우리는 전체 목록,우리가 수행,그렇지 않으면의 첫 부분에 목록에서 다릅니다 마지막 요소입니다.
마지막으로 비교가 오름차순으로 설정하는 첫 번째 요소 INT_MAX
검색 시작을 향한 비 오름차순이다.
그렇지 않으면
마지막으로 비교하는 내림차순으로 설정하는 첫 번째 요소 INT_MIN
검색 시작을 향해 아닌 내림차순으로 쌍입니다.
을 찾아 비교 오류가 발생하거나 배열이 정렬되지 않은 것 또는 우리는 시작 부분에 있습니다. 는 경우,시작 부분에 처리하는 특별한 경우입니다.
어떤 경우에,1 비교당의 반복이다.
#define ASCENDING 1
#define DESCENDING -1
#define UNORDERED 0
#define ALLSAME 1 // Adjust as desired
#define SHORT_LENGTH 1 // Adjust as desired
int is_sorted(size_t n, int *a) {
if (n <= 1) {
return n ? ALLSAME : SHORT_LENGTH;
}
int last = a[--n];
int first = a[0];
a[0] = !last;
while (last == a[--n]) {
;
}
a[0] = first; // restore
if (n == 0) {
if (a[0] < a[1]) {
return ASCENDING;
}
if (a[0] > a[1]) {
return DESCENDING;
}
return ALLSAME;
}
if (a[n - 1] < a[n]) {
// Only ascending, unordered possible
a[0] = INT_MAX;
while (a[n - 1] <= a[n]) {
n--;
}
a[0] = first; // restore
if (a[n - 1] <= a[n]) {
return ASCENDING;
}
} else {
// Only descending, unordered possible
a[0] = INT_MIN;
while (a[n - 1] <= a[n]) {
n--;
}
a[0] = first; // restore
if (a[n - 1] <= a[n]) {
return DESCENDING;
}
}
return UNORDERED;
}
나는 몇 가지 더 많은 테스트니다.
을 경우 배열 const
필요 2 개의 시험을 당다.
for
반복되면(해당되는 경우)모두 플래그가false
.