程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 初探排序學習筆記

初探排序學習筆記

編輯:C++入門知識

簡單選擇排序

思路:選出最小的元素,放在第一個位置,之後在剩下的元素中,選出最小的元素,放在第二個位置.........以此類推,直到完成排序。

package h;

public class MyA 
{
  static void selectOne(int[] a, int begin)
  {
    int p = begin; //假設修正法
     for(int i=begin+1; i



插入排序

思路:把新元素加到已經有序的隊列中

public class MyA
{
	// 第k項插入到前邊的序列中
	static void insertOne(int[] a, int k)
	{
		for(int i=0; i<=k; i++){
			if(a[i]>=a[k]){ //找到了插入的位置
				int tmp = a[k];
				for(int j=k-1; j>=i; j--) a[j+1] = a[j];
				a[i] = tmp;
				break;  
			}
		}
	}
	
	static void show(int[] a)
	{
		for(int i=0; i


快速排序

思路:以一個元素作為標尺,將數據分成兩塊,一塊是小於標尺元素大小的,另一塊是大於等於標尺元素大小的。之後再進行遞歸,

將剛才分成的兩塊按照之前的方法再次進行快速排序,直到改分區(塊)內沒有需要排序的元素。

package j;

class MyA
{
	static void show(int[] a)
	{
		for(int i=0; ip1; i--){
					if(a[i] <= x){
						a[p1++] = a[i];
						p2 = i;
						dr = !dr;
						continue L1;
					}
				}
				p2 = p1;
			}
			else{
				for(int i=p1; i= x){
						a[p2--] = a[i];
						p1 = i;
						dr = !dr;
						continue L1;
					}
				}
				p1 = p2;
			}
		}
		a[p1] = x;
		
		quickSort(a,begin,p1-1);
		quickSort(a,p1+1,end);
	}
		
	public static void main(String[] args)
	{
		int[] a = {15,22,13,9,16,33,15,23,18,4,33,25,14};
		show(a);
		
		quickSort(a, 0, a.length-1);
		show(a);
	}
}


希爾排序

思路:由於原始數據的有序性對排序時間的長短很一定的影響,按一定的步長對數據進行分組,使用插入排序法進行排序。之後不斷的降低步長,直到步長為1。

public class MyA
{
	//希爾排序之一趟排序, dk 為步長
	static void shellOne(int[] data, int dk)
	{
		for(int k=0; k= data[k+i*dk]){
						int tmp = data[k+i*dk];
						for(int p=i-1; p>=j;p--) data[k+(p+1)*dk] = data[k+p*dk];
						data[k+j*dk] = tmp;
						break;
					}
				}
			}
		}
	}
	
	static void show(int[] data)
	{
		for(int i=0; i


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved