2010-12-29 插入排序,快速排序,选择排序,泡排序,堆排序,谢尔排序的C++实现 /// //插入排序 void insertSort(int k[], int n) { int i , j; int temp; for(i = 1; i < n; i++ ){ temp = k[i]; j = i-1; while( j >= 0&& temp < k[j]){ k[j+1] = k[j--]; } k[j+1] = temp; } } /// /// //快速排序核心算法 void quick(int k[], int s, int t) { int i , j; if(s < t){ i = s+1; j = t; while(1){ while(!(k[s] <= k[i] || i == t)) i++; while(!(k[s] >= k[j] || j == s)) j--; if(i < j){ int temp = k[i]; k[i] = k[j]; k[j] = temp; } else{ int temp = k[s]; k[s] = k[j]; k[j] = temp; break; } } quick(k, s, j-1); quick(k, j+1, t); } } //快速排序 void quickSort(int k[], int n) { quick(k, 0, n-1); } /// /// //选择排序 void selectSort(int k[], int n) { for(int i = 0; i < n; i++){ int temp = k[i];//头元素 int min = k[i] ;//记录最小元素 int location = i;//记录最小元素位置 for(int j = i+1; j < n; j++){ if(k[j] < min){ min = k[j]; location = j; } } k[i] = k[location]; k[location] = temp; } } /// /// //冒泡排序 void bubbleSort( int k[], int n) { int flag = 0;//是否有交换动作 for(int i = 0; i< n; i ++){ for(int j = 0; j< n-1; j++){ if(k[j] > k[j+1]){ int temp = k[j]; k[j] = k[j+1]; k[j+1] = temp; flag = 1; } } if(!flag) break; flag = 1; } } /// /// //谢尔排序 void shellSort(int k[], int n) { int gap = n; while(gap > 1){ gap = gap / 2; int flag = 0; for(int i = 0; i< n; i ++){ for(int j = 0; j < n-gap; j++){ if(k[j] > k[j+gap]){ int temp = k[j]; k[j] = k[j+gap]; k[j+gap] = temp; flag = 1; } } if(!flag) break; flag = 1; } } } /// /// //堆调整算法 void adjust(int k[], int i ,int n) { if(i < n){ int j,t; int temp; temp = k[i]; j = 2*i+1; while(j < n){ if(j < n-1 && k[j] < k[j+1])//选出两个子节点较大的一个 j++; if(temp >= k[j])//如果第一个元素最大,退出循环 break; k[i] = k[j];//交换第一个元素跟较大子节点的元素 i = j; j = 2*i+1; } k[(j+1)/2-1] = temp; } } //堆排序 void heapSort(int k[], int n) { int i; int temp; for(i = n/2-1;i >= 0; i--) { adjust(k, i , n); } printK(k,n); for(i = n-1 ; i > 0; i--){ temp = k[i]; k[i] = k[0]; k[0] = temp; adjust(k ,0 ,i); printK(k,n); } } ///
几种排序的算法
最新推荐文章于 2024-09-12 19:02:20 发布