Cần giúp đỡ về CombSort

Mọi người có trick hay tip nào bày mình với, mình code CombSort bị TLE

#include <stdio.h>
#include <algorithm>
#define N 1000000
using namespace std;

float a[N];
int n;
bool check_swapped;
int gap;

FILE *ifp;
char filenam[] = "COMBSORT.IN.TXT";
char *mode = "r";
void readData() {
    ifp=fopen(filenam,mode);
    if(ifp == NULL) {
        printf("ERROR");
        exit(1);
    }
    else {
        fscanf(ifp,"%d",&n);
        int i = 0;
        while(fscanf(ifp,"%f",&a[i]) != EOF) {
//            a[i] = a[i]*10000;
            i++;
        }
    }
    fclose(ifp);
}
int main() {
//    scanf("%d",&n);
//    for(int i = 0 ; i < n ; i++) {
//        scanf("%f",&a[i]);
//    }
    readData();
    gap = n;
    check_swapped = true;
    while( (gap > 1 )|| check_swapped ) {
        gap /= 1.247330950103979;
        if (gap < 1) gap = 1;
        check_swapped = false;
        int i = 0;
        int igap  = i + (int)gap;
        while(igap < n) {

          if(a[i] > a[igap]) {
            swap(a[i],a[igap]);
            check_swapped = true;
          }
          if(a[i] == a[igap]) {
            check_swapped = true;
          }
          i++;
          igap++;
        }
    }
    for(int i = 0 ; i < n ; i++) {
        printf("%.2f ",a[i]);
    }
    return 0;
}

Không có dòng này. Nếu trong mảng có 2 phần tử bằng nhau thì while sẽ không dừng được. :slight_smile:

5 Likes

Thấy ra lúc đầu mình dùng for thay cho while, mà submit cứ bị tle nên là edit loạn cả lên, hoa hết cả mắt, chẳng nhìn được gì cả.

Khi nào mà làm mãi k ra thì thôi. Cứ để đó, đứng dậy đi đâu đó chơi, miễn sao quên được cái đang làm đi là được.

Về lại ngồi làm tiếp là thấy nó khác hẳn à. :slight_smile:

3 Likes

ok cám ơn bạn, làm được việc đấy thì tốt quá

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?