Assume a file already exists, in binary format, non human-readable, contains multiple records of this format struct person { char title[4] char name[20]; // short names padded with spaces int ssn; int dob; double balance; } want to sort the file so that it's in alph order of name. the file is too big to store in RAM int compare(char s[], char t[]) // returns <0 if s0 if s>t { for (int i = 0; i < 20; i += 1) { int d = s[i] - t[i]; if (d != 0) return d; } return 0; } fstream f("file.txt"); if (! f.is_open()) { cerr << "Can't open the file\n"; exit(1); } f.seekg(0, ios::end); int filesize = f.tellg(); int N = filesize / sizeof(person); // records are numbered 0 to N-1; while (N > 0) { f.seekg(0, ios::beg); person biggest; int biggestpos = 0; f.read(& biggest, sizeof(person)); for (int i = 1; i < N; i += 1) { person curr; f.read(& curr, sizeof(person)); if (compare(curr.name, biggest.name) > 0) { biggest = curr; biggestpos = i * sizeof(person); } } person temp; f.seekg((N-1)*sizeof(person), ios::beg); f.read(& temp, sizeof(person)); f.seekp((N-1)*sizeof(person), ios::beg); f.write(& biggest, sizeof(person)); f.seekp(biggestpos * sizeof(person), ios::beg); f.write(& temp, sizeof(person)); N -= 1; } f.close(); }