void select_sort(int p[])//O(n*n) { int i = 0, j = 0, k = 0; for(i=0; i<N; i++) { k = i; /*j是扫描下标,找出最小的值,与无序头部的元素交换*/ for(j=i; j<N; j++) { if(p[k] > p[j]) { k = j; } } swap(p, i, k); } }
void insertion_sort(int p[], int len) //O(n*n) { int i = 0, j = 0; for(i=1; i<len; i++) { int tmp = p[i]; /*从i-1开始比较,切勿忘记第一个元素*/ for(j=i-1; j>=0; j--) { if(p[j] > tmp) { p[j+1] = p[j]; } else if(p[j] < tmp) { break; } } p[j+1] = tmp; } }
void bubble_sort(int p[], int len) //O(n*n) { int i = 0, j = 0; for(i=0; i<len-1; i++) { int exchange = 0;//优化,当前序列已排好序的话,就可以提前退出。 /*每次都从序列尾部开始扫描*/ for(j=len-1; j>0; j--) { if(p[j] < p[j-1]) { swap(p, j, j-1); exchange = 1; } } if(exchange == 0) { break; } } /*打印出冒泡的次数*/ printf("i : %d\n", i); }
原文地址:http://blog.csdn.net/u011467781/article/details/46502025