插入排序:
思路:设有一组关键字{k1,k2,k3,...},排序一开始就认为k1是一个有序序列,让k2插入上述表长为1的有序序列,使之成为表长为2的有序序列,然后让k3插入上述表长为2的有序序列,使之成为表长为3的有序序列,以此类推,最后让kn插入上述表长为n-1的有序序列,得到一个表长为n的有序序列。
#includeusing namespace std;void InsertSort(int a[], int size);void main(){ int a[]={ 2,3,1,8,6,5,9,4,7}; for(int j=0;j<9;j++) cout< <<' '; cout< =0) { a[j+1]=a[j]; j--; } a[j+1] = tmp; }}
冒泡排序:
思路:
1.让j取n-1至1,将a[j]与a[j-1]比较,如果a[j]<a[j-1],则将交换俩数的位置,否则不交换,第一趟比较结束后,最小的数就换到了最前面。
2.让j取n-1至2,重复上述比较对换操作,最终a[1]中存放的是剩余n-1个数中最小的那个。
3.以此类推,直到j取n-1至n-2,将a[n-1]与a[n-2]比较,小的放在a[n-2]的位置。
经过n-1躺冒泡处理,数组即按从小到大的顺序排列完毕。
void BubbleSort(int a[],int size){ int i,j; for(i=1;i=i;j--) { if(a[j]
归并排序:
思路:
1.把n个数看成n个长度为1的有序子表。
2.进行两两归并使记录关键字有序,得到n/2个长度为2的有序子表。
3.重复2步,直到所有记录归并成一个长度为n的有序表。
#includeusing namespace std;void MergeSort(int a[], int size);void MSort(int a[], int TmpArray[], int left, int right);void Merge(int a[], int TmpArray[], int lpos, int leftend, int rpos, int rightend);void main(){ int a[]={ 2,3,1,8,6,5,9,4,7}; for(int j=0;j<9;j++) cout< <<' '; cout<
堆排序:
思路:
1.建立最大堆树。从第一个非叶子节点i开始,将以i节点为跟的子树调整为堆,然后令i=i-1,再将以i节点为跟的子树调整为堆,以此类推,直到i=1,最大堆树建成。
2.堆排序。将堆顶元素与堆中最后一个元素交换位置,然后将前n-1元素调整为堆,交换堆顶元素与堆中倒数第二个元素,再恢复成堆,以此类推
#includeusing namespace std;void HeapSort(int a[], int size);void MaxHeapify(int a[], int index, int size);void main(){ int a[] = { 19, 1, 10, 14, 16, 4, 7, 9, 3, 2, 8, 5, 11}; HeapSort(a, sizeof(a)/sizeof(int)); system("pause");}//堆排序void HeapSort(int a[], int size){ int i, tmp; //建立最大堆树 for(int i=size/2-1;i>=0;i--) MaxHeapify(a, i, size); for(i=size-1;i>0;i--) { tmp=a[0]; a[0]=a[i]; a[i]=tmp; MaxHeapify(a, 0, i); }}//单一节点调整void MaxHeapify(int a[], int index, int size){ int l,r,tmp,largest; l=2*index+1; r=2*index+2; if(l a[index])//如果l>=size则数组越界 largest=l; else largest=index; if(r a[largest]) largest=r; if(largest!=index) { tmp=a[index]; a[index]=a[largest]; a[largest]=tmp; MaxHeapify(a, largest, size); }}
快排:
思路:
1.分解。数组a[p..r]被划分成两个子数组a[a..q-1]和a[q+1..r],使得a[a..q-1]中的每个元素都小于等于a[q],而且,小于等于a[q+1..r]中的元素
2.解决。通过递归调用快速排序,对子数组a[a..q-1]和a[q+1..r]排序
#includeusing namespace std;void quick_sort(int A[], int left, int right);int partition(int A[], int left, int right);void main(){ int a[]={ 2,5,9,3,5,7,4,6,11,8}; quick_sort(a, 0, 9); for(int i=0;i<10;i++) cout< <<" "; cout<