栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

采用索引的方法来实现几种经典的排序算法

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

采用索引的方法来实现几种经典的排序算法

        排序算法相信很多人都比较了解,比如插入排序,选择排序,快速排序,归并排序,堆排序等等。不过有的时候我们需要排序的元素可能所占的字节比较大,直接排序肯定避免不了元素的交换操作,这样其实对内存来说消耗是比较大的,而且时间效率上也会有所下降,这个时候可以考虑增加一个索引数组index[ ]的策略来进行排序,见下图:

 我们只需要对索引数组来进行排序,而不改变原数组中的元素的位置,这就避免了直接交换数组元素的操作,下面附上几种排序的代码:

#include 
#include 
#include 
using namespace std;
//这是快速排序:
void __quick_sort(int arr[],int l,int r,int index[])
{
    if(l>=r)
	    return;
    swap(arr[index[l]],arr[index[rand()%(r-l+1)+l]]);
    int v=arr[index[l]];
    int v2=index[l];
    int l1=l,r1=r;
    while(l1=v&&l1 
//这是归并排序:
void __merge(int arr[],int l,int mid,int r,int index[])
{
     int aux[r-l+1];
     for(int i=l;i<=r;i++){
          aux[i-l]=index[i];
     }
     int i=l,j=mid+1,k=l;
     for(;k<=r;k++){
	  if(i>mid){
                index[k]=aux[j-l];
		j++;
	  }else if(j>r){
                index[k]=aux[i-l];
		i++;
	  }else if(arr[aux[i-l]]=r)
	     return;
     int mid=l+(r-l)/2;
     __mergeSort(arr,l,mid,index);
     __mergeSort(arr,mid+1,r,index);
     __merge(arr,l,mid,r,index);
}

void mergeSort(int arr[],int n,int index[])
{
     __mergeSort(arr,0,n-1,index);
}
//这是插入排序:
void insertSort(int arr[],int n,int index[])
{
    for(int i=1;i0&&arr[index[j-1]]>v;j--){
              index[j]=index[j-1];
	 }
	 index[j]=v2;
    }
}

测试结果:

void print(int arr[],int n)
{
    for(int i=0;i 
int main(void)
{
    srand(time(0));
    int arr[100];
    int index[100];
    int index2[100];
    int index3[100];
    int n=100;
    for(int i=0;i<100;i++){
          index[i]=i;
    }
    creat_arr(arr,100);
    copy_arr(index,n,index2);
    copy_arr(index,n,index3);
    //cout<<"打印Index2:"< 

       简单实现了几种采用索引方式的排序算法,其实就是将原本的算法中元素的直接交换想办法换为index[ ]这个数组中对应位置索引的交换。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/592163.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号