冒泡排序
1: /* 因为冒泡是相邻交换, sign 标记着这次不用交换, 下次也不用交换. */ 2: #include <cstdio> 3: 4: int main(void) { 5: int sign = 1; 6: int a[10] = {1, 454, 634,34, 3, 3, 2343, 23435, 34, 42}; 7: 8: for(int i = 0; i < N-1 && sign; ++i) { 9: sign = 0; 10: for(int j = 0; j < N-1-i; ++j) { 11: if(a[j] > a[j+1]) { 12: int temp = a[j]; 13: a[j] = a[j+1]; 14: a[j+1] = temp; 15: sign = 1; 16: } 17: } 18: } 19: for(int i = 0; i < 10; ++i) { 20: printf("%d ", a[i]); 21: } 22: printf("\n"); 23: 24: return 0; 25: } 26:
选择排序
1: #include <cstdio> 2: 3: int main(void) { 4: int a[10] = {1, 454, 634,34, 3, 3, 2343, 23435, 34, 42}; 5: 6: for(int i = 0; i < 10-1; ++i) { 7: int k = i; 8: for(int j = i+1; j < 10; ++j) { 9: if(a[j] < a[k]) { // 选择出最小的 10: k = j; 11: } 12: } 13: if(k != i) { 14: int temp = a[k]; 15: a[k] = a[i]; 16: a[i] = temp; 17: } 18: } 19: 20: for(int i = 0; i < 10; ++i) { 21: printf("%d ", a[i]); 22: } 23: printf("\n"); 24: 25: return 0; 26: }
插入排序
1: #include <cstdio> 2: 3: int main(void) { 4: int a[10] = {1, 454, 634,34, 3, 3, 2343, 23435, 34, 42}; 5: int i, j; 6: 7: for(i = 1; i < 10; i++) { 8: int key = a[i]; 9: for(j = i-1; j >= 0; j--) { 10: if(key < a[j]) { 11: a[j+1] = a[j]; // 把牌一直向后推, 只要推完最后一个再插进去就是正确的 12: } 13: } 14: a[j+1] = key; // j 已经等于 -1 或者 已经越界, 需要加 1 15: } 16: 17: for(int i = 0; i < 10; ++i) { 18: printf("%d ", a[i]); 19: } 20: printf("\n"); 21: 22: return 0; 23: }
时间: 2024-10-09 09:43:20