常见的排序算法实现(直接插入排序,冒泡排序,快速排序,建大选择排序),还有几个下次写上。
#include "stdio.h" #include "stdlib.h" #include "malloc.h" #include <iostream> using namespace std; #define N 10 void showArr(int a[]); void InsertSort(int a[]); //直接插入排序 void BubbleSort(int a[]); //冒泡排序 void Quicksort(int a[],int ,int); //快速排序 void SimpleSelectionSort(int a[]); //简单选择排序(每次选择一个与第一个交换) int main() { int a[N]={3,1,14,5,2,56,67,54,77,34}; showArr(a); // InsertSort(a); //直接插入排序 // BubbleSort(a); //冒泡排序 //Quicksort(a,0,N-1); //快速排序 //cout<<"这是直接插入排序的结果"<<endl; //showArr(a); //cout<<endl; SimpleSelectionSort(a); system("pause"); return 0; } //打印列表 void showArr(int a[N]) { for(int i=0;i<N;i++) cout<<a[i]<<" "; cout<<endl; } //直接插入排序 void InsertSort(int a[N]) { int tmp; int j; for(int i=1;i<N;i++) if(a[i]<a[i-1]) { tmp=a[i]; //将这个值暂存在tmp中 for(j=i-1;tmp<a[j];j--) a[j+1]=a[j]; //前面覆盖后面的值 a[j+1]=tmp; } cout<<"这是直接插入排序的结果"<<endl; showArr(a); cout<<endl; } //冒泡排序 void BubbleSort(int a[N]) { int tmp; for(int i=0;i<N;i++) for(int j=0;j<N-i-1;j++) { if(a[j]>a[j+1]) { tmp=a[j]; a[j]=a[j+1]; a[j+1]=tmp; } } cout<<endl<<"这是冒泡排序的结果"<<endl; showArr(a); cout<<endl; } //快速排序 void Quicksort(int a[],int left,int right) { if(left<right) { int i=left,j=right,tmp=a[i];//每次以第一个元素为基点排序,小的在前,大的在后面 while(i<j) { while(i<j && a[j]>tmp) j--; if(i<j) a[i++]=a[j]; while(i<j && a[i]<=tmp) i++; if(i<j) a[j--]=a[i]; } a[i]=tmp; //完成第一次快度排序,放入它最终的位置 Quicksort(a,left,i-1); //前面按相同的方法递归快速排序 Quicksort(a,i+1,right); //后面按相同的方法递归快速排序 } } //简单选择排序 void SimpleSelectionSort(int a[]) { int min; int tmp; //临时变量 for(int i=0;i<N-1;i++) { min=i; //首先暂定min为开始的那个元素 for(int j=i+1;j<N;j++) if(a[j]<a[min]) min=j; //找到最小的值 tmp=a[min]; //与第一个元素交换 a[min]=a[i]; a[i]=tmp; } cout<<endl<<"这是选择排序的结果"<<endl; showArr(a); cout<<endl; }
运行结果:
3 1 14 5 2 56 67 54 77 34 这是选择排序的结果 1 2 3 5 14 34 54 56 67 77 请按任意键继续. . .
时间: 2024-10-21 06:42:49