【整理】常见的数组排序方法以及代码实现

来源:互联网 发布:联合国商品数据库 编辑:程序博客网 时间:2024/06/05 14:48

(1) 冒泡法

        核心思想: 通过比较相邻位置的元素,如果第一个元素比第二个元素大,则交换两个元素的位置

代码:

void bubble(int arr[], int len){//1.首先使用外层循环控制比较的轮数int i = 0, j = 0;for (i =1; i <len; i++){//2.针对每一轮进行下标控制for (j =0; j <len-i; j++){//3.比较相邻元素的大小,进行交换if (arr[j] > arr[j+1]){int tmp = arr[j];arr[j] = arr[j+1];arr[j+1] = tmp;}}}}

(2)插入排序算法
          从第二个元素起依次取出,与已排好序的元素比较,并在相应位置插入
  

代码:

void insert(int arr[], int len){//1.从第二个元素起,依次取出int i = 0, j = 0;for (i =1; i <len; i++){//单独保存当前取出的元素,避免覆盖int tmp = arr[i];//2.取出的元素依次与左边的元素进行比较,如果左边有元素并且大于取出的元素,则左边元素右移for (j =i; arr[j-1] >tmp && j>=1; j--){arr[j] = arr[j-1];}//3.直到左边元素小于取出/左边无元素,将取出元素插入到左边元素的右边/最左边if (j != i){arr[j] = tmp;}}}


(3) 选择排序算法
         逐次找出未排序元素中的最小值,并逐个排放

代码:

 

void choose(int arr[], int len){//1.从第一个数起,依次取出int i = 0, j = 0;for(i =0; i <len-1; i++){//2.假定取出的当前是最小值,使用min记录int min = i;//3.使用min记录的元素与后续元素比较,如果找到比min记录还小的元素,则使用min重新记录for (j =i+1; j <len; j++){if (arr[j] < arr[min]){min = j;}}//4.直到与后续元素比较完毕,则交换min记录的元素与最开始假定的最小值if (min != i){int tmp = arr[i];arr[i] = arr[min];arr[min] = tmp;}}}


(4) 快速排序算法
         设定基准值,大于基准值放基准值右边,小于基准值元素放基准值左边。再通过递归直到数组有序

代码:

void quick(int arr[], int left, int right){//1.计算中间元素的下标int p = (left + right) / 2;//2.选择中间元素作为基准值,单独保存起来int pivot = arr[p];//3.将所有小于基准值的元素放在基准值的左边,将所有大于等于基准值的元素放在基准值的右边int i = 0, j = 0;for (i =left, j =right; i <j;){//如果左边有元素,并且左边元素小于基准值,则使用下一个左边元素与基准值比较while (arr[i] < pivot && i < p){i++;}//如果左边有元素,并且不小于基准值if (i < p){//把i指向的元素赋值给p指向的位置arr[p] = arr[i];//变量p指向i指向的位置p = i;}//下面开始处理右边的元素while (arr[j] >= pivot && j > p){j--;}if (j > p){arr[p] = arr[j];p = j;}}//4.i和j生命,将基准值放到生命的位置arr[p] = pivot;//5.使用递归重复以上过程//保证基准值的左右两侧存在至少一个元素时才需要递归,否则不需要递归if (p - left > 1){quick(arr, left, p-1);}if (right - p > 1){quick(arr, p+1, right);}}


(5)“SHELL”法

       数组中设定步长进行排序,再不断减小步长

代码:

void shell(int *a,int n) { int i,j,k,x; k=n/2; /*间距值*/ while(k>=1){ for(i=k;i<n;i++){ x=a[i]; j=i-k; while(j>=0&&x<a[j]) { a[j+k]=a[j]; j-=k; } a[j+k]=x; } k/=2; /*缩小间距值*/ } } 




0 0
原创粉丝点击