6个常见排序
代码
#includevoid Bubblesort1(int a[],int n) // 冒泡排序1 { int i,j,temp; for(i=0;i a[j]) // 交换数组中的两个数 { temp = a[i]; a[i] = a[j]; a[j] = temp; } return; } void Bubblesort2(int a[],int n) // 冒泡排序2(沉底法)与冒泡1差不多 { int i,j,temp; for(i=0;i a[j+1]) { temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; } return; } void Insert(int a[],int n)//插入排序 { int i,j,temp; for(i=1;i =0 && temp < a[j]) // 将抓到的牌与手牌从右向左进行比较 { a[j+1] = a[j]; // 如果该手牌比抓到的牌大,就将其右移 j--; } a[j+1] = temp; // 直到该手牌比抓到的牌小(或二者相等),将抓到的牌插入到该手牌右边(相等元素的相对次序未变,所以插入排序是稳定的) } } void chiose(int a[],int n) // 选择排序 { int min,temp,i,j; for(i=0;i a[j]) // 找出未排序序列中最小的 min = j; if(i != min) // 把未排序序列中最小的放到已排序序列的末尾 { temp = a[i]; a[i] = a[min]; a[min] = temp; } } return; } void TwoInsertSort(int a[],int n) // 二分排序 { int left,right,mid; int i,j,num; for(i=0;i = left) // 二分查找的插入位置 { mid = (left + right) / 2; // 指向已经排好序的中间位置 if(num < a[mid]) // 要插入的元素在左区间 right = mid - 1; else // 要插入的元素在左区间 left = mid + 1; } for(j=i-1;j>=left;j--) a[j+1] = a[j]; a[left] = num; // 插入元素 } } void shell(int a[],int n) // 希尔排序(不会。。。) { int i,j,k,x; k = n / 2; while(k >= 1) { for(i=k;i = 0 && x < a[j]) { a[j+k] = a[j]; j -= k; } a[j+k] = x; } k /= 2; } return; } void Print(int a[],int n) // 输出排序好的数组 { int i; for(i=0;i
Comments | NOTHING