乱七八糟的排序算法

来源:互联网 发布:手机 写真集软件 编辑:程序博客网 时间:2024/05/22 15:29
#include<iostream>using namespace std;int a[5]={3,5,4,2,6};void swap(int *p,int *q){int temp;temp=*p;*p=*q;*q=temp;}//选择排序算法  时间复杂度O(n2),时间复杂度O(1)/*void select(int a[]){int i,j;for(i=0;i<4;i++){int index=i;for(j=i+1;j<5;j++){if(a[j]<a[index])index=j;}if(index!=i)swap(&a[index],&a[i]);}} //来源于网上的二分查找插入排序/*********************************************************函数名称:BinaryInsertSort*参数说明:pDataArray 无序数组;*   iDataNum为无序数据个数*说明:    二分查找插入排序*********************************************************//查找数值iData在长度为iLen的pDataArray数组中的插入位置int FindInsertIndex(int *pDataArray, int iLen, int iData){int iBegin = 0;int iEnd = iLen - 1;int index = -1;    //记录插入位置while (iBegin <= iEnd){index = (iBegin + iEnd) / 2;if (pDataArray[index] > iData)iEnd = index - 1;elseiBegin = index + 1; }if (pDataArray[index] <= iData)index++;return index;}void BinaryInsertSort(int* pDataArray, int iDataNum){for (int i = 1; i < iDataNum; i++)    //从第2个数据开始插入{int index = FindInsertIndex(pDataArray, i, pDataArray[i]);    //二分寻找插入的位置if (i != index)    //插入位置不为i,才挪动、插入{int j = i;int temp = pDataArray[i];while (j > index)    //挪动位置{pDataArray[j] = pDataArray[j-1];j--;}pDataArray[j] = temp;    //插入}}}*///直观的插入排序算法void BinaryInsertSort(int a[]){ //《数据结构》课本上的做法for(int i=1;i<5;i++){int j=i;int temp=a[i];while(j>0&&temp<a[j-1]){a[j]=a[j-1];j--;}a[j]=temp;}//自己瞎写的,麻烦法/*int i,j;for(i=1;i<5;i++){for(j=0;j<i;j++){if(a[j]>=a[i])break;}if(j < i){int k=i;int temp=a[i];while(k>j){a[k]=a[k-1];k--;}a[k]=temp;}}*/}//冒泡排序算法/*void BubbletSort(int a[]){    //自创的,比《数据结构》更简洁些int j,k=5;while(k){for(j=0;j<k-1;j++){if(a[j]>a[j+1])swap(&a[j],&a[j+1]);}k--;}}*/int main(){int i;BinaryInsertSort(a);for(i=0;i<5;i++)cout<<a[i];system("pause");return 0;}

0 0