`

排序的基本算法

 
阅读更多

一、交换排序

 //冒泡排序
static void sort_bubble(int[] a) { 
        int temp=0;
            for(int i=0;i<a.Length-1;i++){
             for(int j=i+1;j<a.Length;j++){
                if(a[i]>a[j]){
                    temp = a[i];
                    a[i] = a[j];
                    a[j] = temp;
                }
             }
            }
        }

 

//快速排序
   static int sourtUnit(int[] array, int low, int hight)
        {
            int key = array[low];
            while (low < hight)
            {
                while (low < hight && array[hight] > key)
                    hight--;
                array[low] = array[hight];

                while (low < hight && array[low] < key)
                    low++;
                array[hight] = array[low];
            }

            array[low] = key;
            return low;
        }
        static void sort(int[] array, int low, int hight)
        {
            if (low < hight)
            {
                //print(array);
                int index = sourtUnit(array, low, hight);
                sort(array, low, index - 1);
                sort(array, index + 1, hight);
            }
        }

 二、选择排序

  //选择排序
        static void sort_choice(int[] a) {
            int index = 0,temp=0;
            for (int i = 0; i < a.Length - 1; i++) {
                index = i;
                for (int j = i + 1; j < a.Length; j++)
                {
                    if (a[index] > a[j]) index = j;
                }
                if (index != i)
                {
                    temp = a[i];
                    a[i] = a[index];
                    a[index] = temp;
                }
               // print(a);
            }
        }

 

       //堆排序
        static void InitHeap(int[] a, int index,int length) {

            int left = 2 * index + 1;
            int right = 2 * index + 2;
            int max=index;
            if (index < length / 2)
            {
                if (left < length && a[max] < a[left])
                    max = left;
                if (right < length && a[max] < a[right])
                    max = right;
                if (max != index) {
                    int temp = a[index];
                    a[index] = a[max];
                    a[max] = temp;
                    InitHeap(a, max,length);
                }
               
            }

        }
//
         int[] c = getArray(100);
            print(c);
          
            for (int i = c.Length / 2 - 1; i >= 0; i--) {
                InitHeap(c, i,c.Length);
            }
            //然后倒序交换
            for (int i = c.Length - 1; i >= 0; i--)
            {

                int temp = c[0];
                c[0] = c[i];
                c[i] = temp;

                InitHeap(c, 0, i);
            }

           
            print(c);

 三、插入排序

 //直接插入排序
        static void sort_insert(int[] a) {
            int index = 0, temp = 0;
            for (int i = 1; i < a.Length; i++) {
                index = i;
                temp = a[i];
                while (index > 0 && a[index - 1] > temp) {
                    a[index] = a[index - 1];
                    index--;
                }
                a[index] = temp;
            }
        }

 

 //希尔排序
        static void sort_shell_insert(int[] a)
        {
            int length = a.Length;
            int interval = length / 2;

            while (interval != 0)
            {

                for (int i = interval; i < length; i++)
                {
                    int t = a[i];
                    int j = i - interval;
                    while (j >= 0 && t < a[j])
                    {
                        a[j + interval] = a[j];
                        j = j - interval;
                    }

                    a[j + interval] = t;
                }
                interval /= 2;
            }
        }  

 四、基数排序

public static void baseSort(int[] a,int d){
		//创建一个二维数组
		int [][]temp=new int[10][a.length];
		int[] length=new int[a.length];
		//循环次数
		int div=1;//除数
		int m=0;//控制循环次数
		int k=0;//赋值的时候变量
		//d循环次数最大数的位数
		while(m<d){
			for(int i=0;i<a.length;i++){
				int lsd=(a[i]/div)%10;
				temp[lsd][length[lsd]]=a[i];
				length[lsd]++;
			}
			for(int i=0;i<10;i++){
				if(length[i]!=0){
					for(int j=0;j<length[i];j++)
						a[k++]=temp[i][j];
					}
				length[i]=0;
			}
			System.out.println(Arrays.toString(a));
			m++;
			div*=10;
			k=0;
		}
	}

 

 

分享到:
评论

相关推荐

    排序及基本算法

    ### 排序及基本算法详解 #### 一、排序的基本概念与分类 排序是一种常见的数据组织方式,旨在根据数据的某一属性(关键字)将其按升序或降序排列。这一过程不仅限于数字,也可以应用于字母、字符串或其他任何可...

    python常用排序算法汇总

    该程序包含7大排序算法: # sort.bubbleSort() #冒泡排序 # sort.shellSort() #希尔排序 # sort.insertionSort() #插入排序 # sort.Selectionsort1() #选择排序 # sort.heapSort() #堆排序 # sort.countSort() ...

    最快的排序算法 计算机最快的算法-史上14个最快速算法:孩子的计算能力爆表!大脑堪比计算机!...,排序算法数据结构

    在计算机科学领域中,排序算法是一种基本的算法,它可以将数据按照一定的顺序排列,以便更好地存储、检索和处理数据。排序算法的速度和效率对程序的性能有着至关重要的影响。 1.冒泡排序算法 冒泡排序算法是一种...

    7种基本排序算法

    本文将详细介绍七种基本排序算法,包括插入排序、快速排序、希尔排序、归并排序、选择排序、冒泡排序(以及双向冒泡排序)和堆排序,这些都是用C语言实现的。对于初学者来说,理解和掌握这些算法有助于提升编程技能...

    冒泡排序基本思想和算法冒泡排序基本思想和算法.

    冒泡排序基本思想和算法 冒泡排序是交换排序的一种基本思想,通过比较和交换记录的关键字,达到排序的目的。下面对冒泡排序的基本思想、算法和性能进行详细的分析。 冒泡排序基本思想 冒泡排序的基本思想是:两两...

    8种基本排序算法2015上

    根据提供的信息,我们可以总结出以下关于八种基本排序算法中的两种——冒泡排序(Bubble Sort)与插入排序(Insert Sort)的知识点。 ### 冒泡排序(Bubble Sort) #### 定义 冒泡排序是一种简单的排序算法。它...

    常用的排序算法总结(各种内部排序算法和外部排序算法)

    排序算法是计算机科学中最基础和重要的算法之一,用于将一组数据按照特定的顺序进行排列。本文将对几种常见的内部排序算法和外部排序算法...理解这些基本的排序算法及其特性,对于任何IT专业人员来说都是非常必要的。

    各种排序算法比较(java实现)

    本文将详细探讨标题所提及的几种排序算法:合并排序、插入排序、希尔排序、快速排序、冒泡排序以及桶排序,并结合Java语言的实现进行解析。 1. **合并排序(Merge Sort)**: 合并排序是一种基于分治策略的排序算法...

    Verilog/C++实现排序算法:Verilog/C++实现排序算法:冒泡排序、选择排序、并行全比较排序、串行全比较排序

    本文将探讨如何使用这两种语言实现几种基本的排序算法:冒泡排序、选择排序,以及两种全比较排序(并行和串行)。 首先,让我们了解一下排序算法。排序是计算机科学中最基础的操作之一,它涉及到将一组数据按照特定...

    排序算法(C语言实现)

    在计算机科学中,排序算法是数据结构领域的重要组成部分,它涉及到如何有效地重新排列一组数据,使其...在掌握这些基本算法后,还可以探索其他高级排序算法,如归并排序、计数排序、基数排序等,以应对更多样化的需求。

    最快的排序算法 谁才是最强的排序算法:快速排序-归并排序-堆排序,排序算法数据结构

    在数据结构中,排序算法是最基本也是最重要的一部分。各种排序算法的性能和选择直接影响着数据处理的效率和准确性。本文将对快速排序、归并排序、堆排序等常见排序算法进行比较和分析,探讨它们的优缺点和适用场景。...

    算法设计与分析-1排序算法性能分析-冒泡/选择/插入/合并/快速排序-pre ppt

    选择排序是一种简单的排序算法,其基本思想是每次从未排序的元素中找出最小(或最大)的元素,将其放置到已排序序列的末尾。时间复杂度为O(n^2),虽然简单易懂,但在处理大数据量时效率较低。 **2. 冒泡排序(Bubble...

    排序查找算法总结

    排序算法是计算机科学中的一种基本算法,用于对数据进行排序。在各种排序算法中,每种算法都有其特点和应用场景。本文将对10种经典的排序算法进行总结,并对每种算法的时间复杂度、空间复杂度和适用场景进行分析。 ...

    查找与排序算法的实现和应用

    排序算法是计算机科学中的一种基本算法,用于将数据结构按照某种顺序排列。常见的排序算法有插入排序、快速排序、选择堆积排序法等。 插入排序算法是一种简单的排序算法,适用于小规模的数据结构。该算法将数据结构...

    快速排序算法和冒泡排序效率对比

    快速排序的基本思想是选取一个基准值,将数组分为两部分:一部分的元素都小于基准,另一部分的元素都大于或等于基准。然后对这两部分分别进行快速排序。快速排序的平均时间复杂度为O(n log n),即使在最坏的情况下,...

    各种排序算法的实验(源代码+实验报告)

    其基本思想是选取一个基准元素,将数组分为两部分,一部分所有元素都小于基准,另一部分所有元素都大于基准,然后对这两部分递归地进行快速排序。 2. **堆排序**:堆排序利用了数据结构——二叉堆的概念。它首先将...

    冒泡排序的基本算法

    初学者可以通过学习冒泡排序来掌握排序算法的基本思路,为进一步学习更复杂的算法打下基础。 综上所述,冒泡排序是一种基础的排序算法,它通过重复遍历数组并交换逆序相邻元素来实现排序。尽管效率较低,但其简单...

    常用排序算法java演示

    Java中实现冒泡排序的基本思路是使用两个嵌套循环,外层循环控制排序轮数,内层循环用于每轮的比较和交换。 2. **选择排序(Selection Sort)**:选择排序的工作原理是每一次从待排序的数据元素中选出最小(或最大...

    Android-Android图形化展示排序算法

    在Android应用中实现图形化排序算法,首先需要了解各种基本的排序算法,例如冒泡排序、选择排序、插入排序、快速排序、归并排序以及堆排序等。这些算法各有特点,如冒泡排序的时间复杂度为O(n^2),适用于小规模数据...

    插入,选择排序的链表实现及快速,希尔,冒泡排序算法实现合集

    选择排序是一种不稳定的排序算法,其基本思想是在未排序序列中找到最小(或最大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(或最大)元素,然后放到已排序序列的末尾。这个过程...

Global site tag (gtag.js) - Google Analytics