|
|
1.1 ! root 1: #print ! 2: Write a program to read a list of positive numbers ! 3: and sort them into ascending order. Print ! 4: the sorted list of numbers one per line ! 5: as five digit numbers (%5d in printf). ! 6: Stop reading numbers when getnum returns -1. ! 7: Compile and test your program; then type "ready". ! 8: #once #create Ref ! 9: 1 ! 10: 3 ! 11: 4 ! 12: 9 ! 13: 11 ! 14: 12 ! 15: 13 ! 16: 14 ! 17: 15 ! 18: 16 ! 19: 17 ! 20: 20 ! 21: 34 ! 22: 71 ! 23: 200 ! 24: 225 ! 25: 250 ! 26: 275 ! 27: 300 ! 28: 4095 ! 29: 7111 ! 30: 16384 ! 31: #once cp %s/getnum.o . ! 32: #once #create input ! 33: 4 20 3 200 16384 4095 71 11 12 13 14 ! 34: 15 16 17 34 9 7111 300 275 250 225 1 ! 35: #user ! 36: a.out <input >xxx ! 37: #cmp xxx Ref ! 38: #succeed ! 39: main() ! 40: { ! 41: int n; ! 42: int list[1000]; ! 43: ! 44: n = getlist(list); ! 45: shellsort(list, n); ! 46: printlist(list, n); ! 47: } ! 48: ! 49: getlist(list) ! 50: int list[]; ! 51: { ! 52: int n; ! 53: ! 54: n = 0; ! 55: while ((list[n]=getnum()) >= 0) ! 56: n++; ! 57: return(n); ! 58: } ! 59: ! 60: /* this is a shell sort, stripped down to process a list ! 61: of integers only. Although you probably don't know ! 62: how to write this offhand, you should know where to find ! 63: it - it is only marginally more code than a bubble sort ! 64: and much faster (n**1.5 vs. n**2) in time. */ ! 65: shellsort(v, n) /* sort v[0]...v[n-1] into increasing order */ ! 66: int v[], n; ! 67: { ! 68: int gap, i, j, temp; ! 69: ! 70: for (gap = n/2; gap > 0; gap /= 2) ! 71: for (i = gap; i < n; i++) ! 72: for (j=i-gap; j>=0 && v[j]>v[j+gap]; j-=gap) { ! 73: temp = v[j]; ! 74: v[j] = v[j+gap]; ! 75: v[j+gap] = temp; ! 76: } ! 77: } ! 78: ! 79: printlist(list, n) ! 80: int list[], n; ! 81: { ! 82: int i; ! 83: for(i=0; i<n; i++) ! 84: printf("%5d\n",list[i]); ! 85: } ! 86: /* this is a crummy bubble sort which ! 87: would work perfectly well for this ! 88: problem but can not be recommended ! 89: for large jobs. ! 90: sortlist() ! 91: { ! 92: int i, j, k; ! 93: ! 94: for(i=0; i<n; i++) ! 95: for(j=n-1; j>0; j--) ! 96: if (list[j-1] > list[j]) { ! 97: k = list[j]; ! 98: list[j] = list[j-1]; ! 99: list[j-1] = k; ! 100: } ! 101: } ! 102: ****/ ! 103: #log ! 104: #next ! 105: 30.1a 10
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.