简单的排序算法——插入排序,选择排序,交换排序(冒泡排序,快速排序)
代码 // Ch08sort.cpp : Defines the entry point for the console application. //默认是从小到大排序 #include <time.h> #include <iostream> #include <iomanip> using namespace std; #define SIZE 10 #define MAX 10000 //直接插入排序080201 //原理:每次将待排序的记录,按其关键字大小插入到前边已经排好序的子文件中的适当位置 int InsertSort(int arr[],int len){ int temp,j; for(int i=1;i<len;i++){ if(arr[i]<arr[i-1]){ temp=arr[i]; j=i; do{ arr[j]=arr[j-1]; j--; }while(j>0&&arr[j-1]>temp); arr[j] = temp; } } return 0; } //交换排序---冒泡排序,快速排序 //原理:两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止。 //冒泡排序080301 int BubbleSort(int arr[],int len){ int k,temp ; for(int i=0;i<len-1;i++){ k = i; for(int j=i+1;j<len;j++){ if(arr[j]<arr[k]) k = j; } if(k!=i){ temp = arr[i]; arr[i] = arr[k]; arr[k] = temp; } } return 0; } //快速排序080302 int Partition(int arr[],int len,int i,int j){ int pivot = arr[i]; while(i<j){ while(i<j&&arr[j]>=pivot){ j--; } if(i<j){ arr[i++] = arr[j]; } while(i<j&&arr[i]<=pivot){ i++; } if(i<j){ arr[j--] = arr[i]; } } arr[i] = pivot; return i; } int QuickSort(int arr[],int len,int low=0,int high=SIZE){ int pivotpos; if(low<high){ pivotpos = Partition(arr,len,low,high); QuickSort(arr,len,low,pivotpos-1); QuickSort(arr,len,pivotpos+1,high); } return 0; } //直接选择排序080401 //原理:每一趟从待排序的记录中选出关键字最小的记录,顺序放到已排好序的子文件的最后 int StraightSelect(int arr[],int len){ int temp=0; int k; for(int i=0;i<len;i++){ k=i; for(int j=k+1;j<len;j++){ if(arr[j]<arr[k]){ k = j; } } if(k!=i){ temp = arr[k]; arr[k] = arr[i]; arr[i] = temp; } } return 0; } //桶排序 //打印数组 int printarr(int arr[],int len){ for(int i=0;i<len;i++){ if(i%10==0) cout<<endl; cout<<setw(4)<<arr[i]<<" "; } cout<<endl; return 0; } int main() { int arr[SIZE]; int len = sizeof(arr)/sizeof(arr[0]);//SIZE srand( (unsigned)time( NULL ) ); for(int i=0;i<len;i++){ arr[i] =rand()%MAX; } printarr(arr,len); // StraightSelect(arr,len); // InsertSort(arr,len); // BubbleSort(arr,len); QuickSort(arr,len); printarr(arr,len); return 0; }